环境搭建
工具链是一个静态分发的目录,不需要 root,也不需要编译环境——除非你要在自己的机器上做交叉编译。
确认是否已安装
px --version
px 0.2.382
能打印出这个版本号就说明工具链可用。命令 pxc 是 px 的兼容别名,二者完全等价。
安装方式一:发布包(推荐给开发机)
tar xzf puxian-0.2.382-<tag>.tar.gz cd puxian-0.2.382-<tag> ./tools/px --version ./tools/px run hello.px
解压即可用。目录结构如下:
| 路径 | 内容 |
|---|---|
tools/px | 工具链入口(build / run / lint / fmt / test / doc) |
tools/pxpkg | 包管理器,读取 registry |
bootstrap/ | 编译器、解释器、词法/语法分析器 |
runtime/ | 编译所需的 C 运行时与第三方静态库 |
stdlib/ | 27 个标准库模块 |
registry/ | 195 个生态包 |
px 软链到 /usr/local/bin,在别处写代码时先设环境变量:export PX_STDLIB=/opt/puxian/stdlib安装方式二:RPM(Rocky / CentOS / openEuler)
仓库根地址 https://soft.xiusoft.cn/puxian/rpm/,提供 el7、el9 与 openEuler 22.03 / 24.03 四个构建。
第一步:写仓库配置
cat > /etc/yum.repos.d/puxian.repo <<'EOF' [puxian] name=PuXian E2E (镜像仓库) baseurl=https://soft.xiusoft.cn/puxian/rpm/$releasever/$basearch/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://soft.xiusoft.cn/puxian/rpm/PUXIAN-GPG-KEY.asc EOF
<<'EOF',不能写 <<EOF。后者 shell 会把 $releasever 与 $basearch 当变量展开成空串,落盘变成 /rpm//x86_64/,dnf 报 404,而 cat 出来的文件看上去「没什么问题」——错误发生在写入那一刻,不在读取时。| 配置项 | 值 | 作用 |
|---|---|---|
name | PuXian E2E (镜像仓库) | dnf repolist 里显示的名字,不参与解析 |
baseurl | …/rpm/$releasever/$basearch/ | dnf 把两个变量替换成系统主版本与 CPU 架构,再拼成索引目录 |
enabled | 1 | 参与依赖解析;0 表示配上但不启用 |
gpgcheck | 1 | 校验每个 rpm 的签名,不过则拒装 |
repo_gpgcheck | 1 | 校验 repodata 索引本身的签名——防的是索引被替换,与上面那条不是一回事 |
gpgkey | …/PUXIAN-GPG-KEY.asc | 公钥地址,首次装包时自动导入 |
第二步:确认仓库可解析
dnf repolist puxian
repo id repo name status puxian PuXian E2E (镜像仓库) enabled
status 为 enabled 即通。若这里报 Cannot download repomd.xml: 404,先核对 baseurl 里的版本目录是否存在(见下表)。
版本目录对照
| 系统 | $releasever | 默认配置命中的路径 | 是否可用 |
|---|---|---|---|
| Rocky 9 / Alma 9 / CentOS Stream 9 | 9 | /rpm/9/x86_64/ | 直接可用 |
| CentOS 7 | 7 | /rpm/7/x86_64/ | 直接可用 |
| openEuler 22.03 | 22.03 | /rpm/22.03/x86_64/ | 不存在,要改 baseurl |
| openEuler 24.03 | 24.03 | /rpm/24.03/x86_64/ | 不存在,要改 baseurl |
openEuler 的版本目录在 openeuler/ 子目录下,不是顶层的 $releasever,所以要把 baseurl 写成绝对路径:
baseurl=https://soft.xiusoft.cn/puxian/rpm/openeuler/22.03/$basearch/
第三步:安装
dnf install -y puxian px --version
px 0.2.382
镜像仓库当前的包与已装版本可以用一条命令对照:
dnf list puxian
Installed Packages puxian.x86_64 0.2.382-1.m382.el9 @puxian
升级用 dnf upgrade -y puxian。本教程正文里的实测输出记录于 0.2.382,与仓库当前版本一致;看到 0.2.37x 的旧输出说明你的机器该升级了。换版本会让编译缓存整体失效,首个请求会多等 1–2 秒,属正常。
第四步:核对公钥指纹
首次装包会提示导入公钥,指纹应当是:
pub rsa4096 2026-09-05 [SC] 3345 36AC 7B3E 161A BE1F 5375 3851 AD99 2A61 D264 uid PuXian Release Signing (Nanzhan Group Datzhetongyou Team) <xiuqing@qq.com>
curl -sS https://soft.xiusoft.cn/puxian/rpm/PUXIAN-GPG-KEY.asc | gpg --show-keys --with-fingerprint
离线机器
没有外网时,从同一镜像取 rpm 直接装,跳过仓库这一步:
curl -O https://soft.xiusoft.cn/puxian/rpm/9/x86_64/puxian-0.2.382-1.m382.el9.x86_64.rpm rpm -Uvh puxian-0.2.382-1.m382.el9.x86_64.rpm
这条路径不经过 dnf,仓库能自动带的系统依赖要自己补齐,下面这条尤其容易漏。
px build 需要 glibc-static,它只在 crb 仓库里:dnf -y --enablerepo=crb install glibc-static纯
px run(解释执行)不需要它。写第一个文件
新建一个目录,放一个 hello.px:
def main(): print("hello, puxian")
px run hello.px
hello, puxian
不需要 package 声明、不需要 import main、不需要 func main()。一个文件就是一个可执行程序。
编辑器的选择
PuXian 提供 LSP,任何支持 LSP 的编辑器都能拿到补全与诊断:
px lsp
没有特殊需求时,VS Code 装上任意 LSP 客户端、指向 px lsp 即可。也可以只用 px fmt 保持格式统一。
本章检查清单
px --version输出与你的发布包一致;- 能
px run一个 hello 程序; - 知道
stdlib与registry分别在哪; - 知道纯解释执行不需要 gcc,编译成二进制才需要。