Ubuntu 22.04 构建 Apache Magpie 0.1.0 指南
在 Ubuntu 22.04 上从零构建 Apache Magpie 0.1.0 的完整指南:uv 工作区同步、依赖锁定与三重验证,含镜像时间戳缺失等真实排障。
Ubuntu 22.04 构建 Apache Magpie 0.1.0 指南
目标:在 Ubuntu 22.04 上下载官方源码包并完成 Magpie 0.1.0 的依赖同步、工作区构建与运行验证,已在 Ubuntu 22.04 实测通过。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS |
| 架构 | x86_64 |
| Python | 3.13.16(uv 托管安装;系统自备 3.10 不满足要求) |
| uv | 0.13.1 |
| git | 2.34.1(部分测试依赖) |
| 实测版本 | Apache Magpie 0.1.0 |
| 安装目录 | /opt/magpie/apache-magpie-0.1.0 |
| PyPI 索引 | https://pypi.org/simple/(实测必须用官方源,见 4.2 排障) |
环境要点:Magpie 不是传统意义的"编译"项目——技能层是 Markdown,工具层是 Python——因此构建等价于"装好 uv、同步工作区依赖、跑通校验与测试"。系统自带的 Python 3.10 低于框架要求的 3.11,实测由 uv 自动安装托管版 Python 3.13 解决,这是本指南推荐路径。
二、前置条件
2.1 安装基础工具
$ apt-get update && apt-get install -y curl unzip git
$ git --version
git version 2.34.1
说明:curl 用于下载源码包与 uv 安装脚本;unzip 解压源码;git 不参与"构建",但 symlink-lint 的测试套件要执行 git init(缺 git 时 6 个测试报 FileNotFoundError,实测复现并验证修复)。
2.2 安装 uv
推荐用 pip 安装(Ubuntu 22.04 自带 python3-pip):
$ pip3 install -q -i https://mirrors.aliyun.com/pypi/simple/ uv
$ uv --version
uv 0.13.1 (x86_64-unknown-linux-gnu)
逐项说明:-i 指向阿里云 PyPI 镜像可显著加速 uv 本体下载;uv 版本需满足框架根 pyproject.toml 的 required-version 声明(大于等于 0.11.8),实测 0.13.1 通过。
2.3 Python 版本红线
框架要求 requires-python 大于等于 3.11。实测 Ubuntu 22.04 仓库里的 python3.11 是 3.11.0rc1(候选版),按 PEP 440 语义 3.11.0rc1 小于 3.11.0,不满足大于等于 3.11 的约束,不能依赖。正确做法是让 uv 安装托管解释器(见 4.1),实测一键完成:
$ uv python install 3.13
Installed Python 3.13.16 in 3.32s
+ cpython-3.13.16-linux-x86_64-gnu (python3.13)
三、下载与校验
3.1 下载源码包
$ mkdir -p /opt/magpie && cd /opt/magpie
$ curl -sSL -o apache-magpie-0.1.0-source.zip https://dlcdn.apache.org/magpie/0.1.0/apache-magpie-0.1.0-source.zip
$ ls -la apache-magpie-0.1.0-source.zip
-rw-r--r-- 1 root root 7883283 Oct 14 16:57 apache-magpie-0.1.0-source.zip
3.2 SHA-512 校验
$ sha512sum apache-magpie-0.1.0-source.zip
991218c7ecbe66a5ccf4b6e5b55cedee33382d8f38d1bd8683a45303771e8d43cd106acd371931801450ed77d993c9c778fd03f0c231eb892adb7f8b21af3568 apache-magpie-0.1.0-source.zip
校验解读:7883283 字节、SHA-512 全值如上(实测)。生产环境应同时核对官方发布的签名(.asc)后再解压。
3.3 解压
$ unzip -q apache-magpie-0.1.0-source.zip
$ ls /opt/magpie/apache-magpie-0.1.0/
AGENTS.md CHANGELOG.md CONTRIBUTING.md LICENSE MISSION.md
NOTICE PRINCIPLES.md README.md ai-tutors assets docs
doap_Magpie.rdf organizations projects pyproject.toml skills tools
解压解读:完整源码树如上,无独立的安装脚本——"构建"入口即根目录的 pyproject.toml 所定义的 uv 工作区。
四、构建:uv 工作区同步
4.1 同步命令
$ cd /opt/magpie/apache-magpie-0.1.0
$ export UV_DEFAULT_INDEX=https://pypi.org/simple/
$ uv sync --group dev --python 3.13
Prepared 13 packages in 1.85s
Installed 13 packages in 35ms
+ ast-serialize==0.5.0
+ iniconfig==2.3.0
+ librt==0.11.0
+ mypy==2.1.0
+ mypy-extensions==1.1.0
+ packaging==26.2
+ pathspec==1.1.1
+ pluggy==1.6.0
+ prek==0.4.5
+ pygments==2.20.0
+ pytest==9.1.1
+ ruff==0.15.20
+ typing-extensions==4.15.0
逐项解读:UV_DEFAULT_INDEX 指定官方 PyPI 索引(原因见 4.2 排障);--group dev 安装根 pyproject 的 dev 依赖组——pytest 9.1.1、ruff 0.15.20、mypy 2.1.0、prek 0.4.5 及其传递依赖,共 13 包;--python 3.13 指定用 uv 托管的 3.13.16 建虚拟环境。首次执行 uv 会自动下载 Python 3.13.16(实测 3.32 秒),随后在源码树生成 .venv。
4.2 排障记录:镜像源导致解析失败
实测使用阿里云 PyPI 镜像时,uv sync 失败:
error: No solution found when resolving dependencies for split (markers: python_full_version >= '3.15')
cause: Because mypy==2.1.0 has no publish time and there are no versions of mypy, we can conclude that mypy>=2.1.0 cannot be used.
hint: `mypy` was filtered by `exclude-newer` to only include packages uploaded before 2026-10-07. The latest version satisfying the requirement is v2.4.0.
根因分析:框架根 pyproject.toml 配置了 exclude-newer 等于 7 days(依赖冷却期:新上传的包要静置 7 天才可被解析,防投毒)。该机制依赖索引返回每个文件的准确上传时间,而镜像源页面缺失时间戳字段(uv 输出大量 missing an upload date 告警),导致 uv 无法判定 mypy 是否过冷却期,解析直接失败。修复:改用官方 PyPI 索引(UV_DEFAULT_INDEX 设为 https://pypi.org/simple/),实测一次通过。
💡 技术拓展:exclude-newer 类冷却机制是供应链防护手段(给回滚、撤包留观察窗),代价是对索引元数据完整性要求高。使用任何镜像同步 uv 项目前,先确认镜像是否回传上传时间戳;否则要么换官方源,要么用 exclude-newer-package 针对性豁免个别包。
4.3 成员环境准备(可选,跑成员测试前执行)
工作区成员测试会在首次 uv run 时自动构建安装对应成员包,无需手工操作。实测在 tools/symlink-lint 下执行 uv run pytest 时输出可见:
Built symlink-lint @ file:///opt/magpie/apache-magpie-0.1.0/tools/symlink-lint
Built magpie-vcs @ file:///opt/magpie/apache-magpie-0.1.0/tools/vcs
解读:uv 按成员各自的 pyproject 构建并装入临时环境,构建源即本地源码树,无需网络。
五、验证
5.1 技能定义全量校验
$ export UV_DEFAULT_INDEX=https://pypi.org/simple/
$ uv run --package skill-and-tool-validator skill-and-tool-validate
skill-and-tool-validator: 28 SOFT warning(s) across 26 skill(s) — advisory, not blocking
skills/committer-onboarding/SKILL.md (1 warning)
[skill-line-limit] SKILL.md is 663 lines, exceeding the 500-line limit (PRINCIPLES.md §14)
...
summary by rule:
skill-line-limit 23
action-inventory 2
asf-coupling 2
other 1
输出节选(实测首尾):校验器扫描全部 70 个技能,结论为 28 条 SOFT 级建议(单文件行数超 500、描述里逗号过多等),无硬性失败,退出码 0。此命令同时验证了 Python 工具链可运行与技能资产完整。
5.2 工具成员测试
$ cd /opt/magpie/apache-magpie-0.1.0/tools/symlink-lint && uv run pytest
.................... [100%]
(20 passed)
$ cd /opt/magpie/apache-magpie-0.1.0/tools/vcs && uv run pytest
24 passed, 4 skipped in 1.00s
验证解读:symlink-lint 20 个测试全绿(前提:git 已装,见 2.1 排障);magpie-vcs 24 过 4 跳过,跳过项实测均为 hg not installed——Mercurial 桥接的测试按预期条件跳过,非失败。两条命令即完成"工具层可构建、可运行"的实证。
5.3 构建产物清单
实测同步后源码树新增内容:
| 路径 | 性质 | 说明 |
|---|---|---|
| .venv/ | 虚拟环境 | uv 生成,含 13 个 dev 包 |
| uv.lock(既有) | 锁文件 | 随源码包分发,无需再生 |
| pycache 等 | 缓存 | uv run 时产生 |
Magpie 无编译型产物,"构建完成"的判定即 5.1/5.2 两项验证通过。
六、安装与卸载
6.1 安装形态
Magpie 作为维护框架的"安装"分两种形态,实测区分:
| 形态 | 操作 | 适用 |
|---|---|---|
| 框架开发环境 | 本指南全文(源码树 + uv sync) | 参与框架开发、跑工具与测试 |
| 项目采用 | 在目标仓库提交 skills/setup 技能并执行引导 | 把技能接入某开源项目 |
采用形态的细节(快照、符号链接、覆盖文件)见介绍篇 3.3 节与源码 README.md,构建环境是采用形态的前置工作台。
6.2 卸载
$ cd /opt/magpie/apache-magpie-0.1.0 && rm -rf .venv # 删除虚拟环境
$ uv cache clean # 清理 uv 下载缓存(可选)
$ rm -rf /opt/magpie # 移除源码与演示仓库(可选)
逐项说明:.venv 是唯一由构建写入源码树的目录,删除即回到源码原始状态;uv cache clean 清理全局缓存目录中的 Python 与包文件;最后一步按需删除整个工作目录。卸载不影响系统 Python 与 git。
七、常见问题(FAQ)
Q1:需要先装 Python 3.11 吗? A:不需要装系统级 Python。实测 uv python install 3.13 一条命令获得合规解释器(3.13.16),uv sync 时用 --python 3.13 指定即可。系统 Ubuntu 22.04 的 python3.11 是 3.11.0rc1,按 PEP 440 不满足大于等于 3.11,实测不可用。
Q2:为什么必须用官方 PyPI 源? A:框架配置了 7 天依赖冷却(exclude-newer),需要索引提供上传时间戳;实测阿里云镜像缺失该字段导致 uv 解析失败(mypy has no publish time)。换官方源后一次通过。
Q3:构建为什么这么快、没有编译步骤? A:Magpie 是"Markdown 技能 + Python 工具"的组合,无编译产物。构建等价于依赖同步(实测 13 包 1.85 秒准备、35 毫秒安装),验证靠校验器与 pytest。
Q4:uv sync 报 required-version 不满足? A:根 pyproject 要求 uv 大于等于 0.11.8(实测声明的钉定值),用 pip3 install -U uv 升级后重试。实测 uv 0.13.1 通过。
Q5:symlink-lint 测试大量 FileNotFoundError? A:实测根因是系统缺 git——测试用 git init 造临时仓库。apt 安装 git 后重跑,20 个测试全部通过。
Q6:magpie-vcs 测试有 skipped 正常吗? A:正常。实测 4 个跳过均为 hg not installed,是 Mercurial 后端测试的条件跳过逻辑;需要全绿可另装 hg,git 相关测试不受影响。
Q7:校验器报 28 条 SOFT warning 要处理吗? A:不用。SOFT 是建议级(单文件超 500 行、描述枚举过长等),不影响退出码(实测 0)。官方设计上硬失败(frontmatter 缺字段、内链断裂)才会阻断。
Q8:离线环境能完成构建吗? A:不完全能。uv 需要在线拉 Python 3.13 与 13 个包;同步完成后,技能校验、工具运行与 pytest 全部离线可跑(skill-and-tool-validator 自述 runs fully offline,实测属实)。
Q9:uv.lock 需要自己生成吗? A:不需要。锁文件随源码包分发,实测 uv sync 直接按锁安装,保证与上游 CI 一致的依赖版本。
Q10:装完如何确认一切就绪? A:三条命令:uv run --package skill-and-tool-validator skill-and-tool-validate 退出码 0;tools/symlink-lint 下 pytest 20 passed;tools/vcs 下 pytest 24 passed, 4 skipped。实测全部满足即为就绪。
八、参考链接
- Apache Magpie 官网:https://magpie.apache.org/
- 0.1.0 发行页:https://dlcdn.apache.org/magpie/0.1.0/
- uv 官方文档:https://docs.astral.sh/uv/
- uv 工作区概念:https://docs.astral.sh/uv/concepts/workspaces/
- PEP 440 版本规范(rc 与正式版排序依据):https://peps.python.org/pep-0440/
- 源码内构建说明:README.md、CONTRIBUTING.md(apache-magpie-0.1.0 包内)