Ubuntu 22.04 构建 Apache Magpie 0.1.0 指南

在 Ubuntu 22.04 上从零构建 Apache Magpie 0.1.0 的完整指南:uv 工作区同步、依赖锁定与三重验证,含镜像时间戳缺失等真实排障。

Apache MagpieMagpieApacheAI Agent安装部署Ubuntu 22.042026/10/15

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
Python3.13.16(uv 托管安装;系统自备 3.10 不满足要求)
uv0.13.1
git2.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。实测全部满足即为就绪。

八、参考链接

  1. Apache Magpie 官网:https://magpie.apache.org/
  2. 0.1.0 发行页:https://dlcdn.apache.org/magpie/0.1.0/
  3. uv 官方文档:https://docs.astral.sh/uv/
  4. uv 工作区概念:https://docs.astral.sh/uv/concepts/workspaces/
  5. PEP 440 版本规范(rc 与正式版排序依据):https://peps.python.org/pep-0440/
  6. 源码内构建说明:README.md、CONTRIBUTING.md(apache-magpie-0.1.0 包内)