如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
(前身为 pyo3-pack)
使用最少配置构建和发布带有 pyo3、cffi 和 uniffi 绑定 的 crate,以及将 Rust 二进制文件作为 Python 包发布。它支持为 Windows、Linux、macOS 和 FreeBSD 上的 Python 3.8+ 构建 wheel,可将其上传到 https://pypi.org/%EF%BC%8C%E5%B9%B6%E5%9F%BA%E6%9C%AC%E6%94%AF%E6%8C%81 PyPy 和 GraalPy。
查看 用户指南!
# pipx
pipx install maturin
# uv
uv tool install maturin
[!NOTE]
如果不想使用 pipx,
pip install maturin也可以正常工作。
主要有三个命令:
maturin new 创建一个配置了 maturin 的新 cargo 项目。maturin build 构建 wheel 并将其存储在文件夹中(默认是 target/wheels),但不会上传。建议使用 https://github.com/astral-sh/uv 通过 uv publish 发布包。maturin develop 构建 crate 并将其作为 Python 模块直接安装到当前虚拟环境中。注意,虽然 maturin develop 速度更快,但它不支持 maturin build 后运行 pip install 所支持的所有功能。maturin 不需要额外的配置文件,也不会与现有的 setuptools-rust 配置冲突。你甚至可以将其与 https://tox.readthedocs.io/en/latest/ 等测试工具集成。test-crates 文件夹中包含不同绑定的示例。
包名称将是 cargo 项目的名称,即 Cargo.toml 中 [package] 部分的 name 字段。导入时使用的模块名称将是 [lib] 部分的 name 值(默认为包名称)。对于二进制文件,它就是 cargo 生成的二进制文件的名称。
使用 maturin build 和 maturin develop 命令时,可以通过添加 -r 或 --release 标志编译性能优化的程序。
Python 包有两种格式:一种称为 wheel 的构建形式和源代码分发版(sdist),两者都是归档文件。wheel 可以与任何 Python 版本、解释器(主要是 cpython 和 pypy)、操作系统和硬件架构兼容(对于纯 Python wheel),也可以限制在特定平台和架构(例如使用 ctypes 或 cffi 时),或者特定架构和操作系统上的特定 Python 解释器和版本(例如使用 pyo3 时)。
对包使用 pip install 时,pip 会尝试找到匹配的 wheel 并安装。如果找不到,它会下载源代码分发版并为当前平台构建 wheel,这需要安装正确的编译器。安装 wheel 比安装源代码分发版快得多,因为构建 wheel 通常很慢。
当你发布可通过 pip install 安装的包时,需将其上传到官方包仓库 https://pypi.org/%E3%80%82%E6%B5%8B%E8%AF%95%E6%97%B6%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8 https://test.pypi.org/ 替代,可通过 pip install --index-url https://test.pypi.org/simple/ 使用。注意,对于 Linux 发布,你需要使用 manylinux docker 容器或 zig,而从仓库发布时可以使用 https://github.com/PyO3/maturin-action GitHub Action。
要创建混合 Rust/Python 项目,请在 Cargo.toml 旁边创建一个与模块名称(即 https://doc.rust-lang.org/cargo/reference/cargo-targets.html#the-name-field%EF%BC%89%E7%9B%B8%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%8C%E5%B9%B6%E5%9C%A8%E5%85%B6%E4%B8%AD%E6%B7%BB%E5%8A%A0 Python 源代码:
my-project
├── Cargo.toml
├── my_project
│ ├── __init__.py
│ └── bar.py
├── pyproject.toml
├── README.md
└── src
└── lib.rs
你可以在 pyproject.toml 中通过设置 tool.maturin.python-source 指定不同的 Python 源目录,例如
pyproject.toml
[tool.maturin]
python-source = "python"
module-name = "my_project._lib_name"
此时项目结构如下:
my-project
├── Cargo.toml
├── python
│ └── my_project
│ ├── __init__.py
│ └── bar.py
├── pyproject.toml
├── README.md
└── src
└── lib.rs
[!NOTE]
建议使用此结构以避免 https://github.com/PyO3/maturin/issues/490
maturin 会将原生扩展作为模块添加到你的 Python 文件夹中。使用 develop 时,maturin 会将原生库复制到 Python 文件夹中,对于 cffi 还会复制粘合代码。你应该将这些文件添加到 .gitignore 中。
使用 cffi 时,你可以执行 from .my_project import lib,然后使用 lib.my_native_function;使用 pyo3 时,你可以直接 from .my_project import my_native_function。
使用 pyo3 执行 maturin develop 后的示例布局:
my-project
├── Cargo.toml
├── my_project
│ ├── __init__.py
│ ├── bar.py
│ └── _lib_name.cpython-36m-x86_64-linux-gnu.so
├── README.md
└── src
└── lib.rs
执行此操作时,还需确保代码中的模块名称与 module-name 的最后一部分匹配(不要包含包路径):
#[pymodule]
#[pyo3(name="_lib_name")]
fn my_lib_name(m: &Bound ) -> PyResult {
m.add_class:: ()?;
Ok(())
}
自 1.64 版本起,Rust 编译器https://blog.rust-lang.org/2022/08/01/Increasing-glibc-kernel-requirements.html%EF%BC%8C%E5%9B%A0%E6%AD%A4%E6%82%A8%E8%87%B3%E5%B0%91%E9%9C%80%E8%A6%81%E4%BD%BF%E7%94%A8 manylinux2014。
发布时,我们建议使用 manylinux 标志强制使用与镜像相同的 manylinux 版本,例如,如果您在 quay.io/pypa/manylinux2014_x86_64 中构建,请使用 --manylinux 2014。如果您设置例如 manylinux: 2014,https://github.com/PyO3/maturin-action GitHub Action 会自动处理这一点。
maturin 包含 auditwheel 的重新实现,会自动检查生成的库并为 wheel 赋予正确的平台标签。如果您系统的 glibc 版本过高或链接了其他共享库,它会分配 linux 标签。您也可以手动禁用这些检查,使用 --manylinux off 直接使用原生 Linux 目标。
要完全符合 manylinux 标准,您需要在 CentOS Docker 容器中编译。https://ghcr.io/pyo3/maturin 镜像基于 manylinux2014 镜像,并将参数传递给 maturin 二进制文件。您可以这样使用:
docker run --rm -v $(pwd):/io ghcr.io/pyo3/maturin build --release # or other maturin arguments
[!NOTE] 此镜像非常基础,仅包含 python、maturin 和 stable rust。如果您需要其他工具,可以在 manylinux 容器内运行命令。有关小型教学示例,请参见 https://github.com/konstin/complex-manylinux-maturin-docker%EF%BC%9B%E6%9C%89%E5%85%B3%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8%E8%AE%BE%E7%BD%AE%EF%BC%8C%E8%AF%B7%E5%8F%82%E8%A7%81 https://github.com/nanoporetech/fast-ctc-decode/blob/b226ea0f2b2f4f474eff47349703d57d2ea4801b/.github/workflows/publish.yml%E3%80%82
当针对 musl 目标编译时,maturin 本身符合 manylinux 标准。
tpchgen 的 Python CLI 绑定,tpchgen 是一个纯 Rust 编写的极速 TPC-H 基准数据生成器,零依赖欢迎所有人为 maturin 做贡献!支持项目的方式有很多,例如:
如果您希望为 maturin 贡献时间并正在寻找起点,我们的https://github.com/PyO3/maturin/blob/main/guide/src/contributing.md%E6%8F%90%E4%BE%9B%E4%BA%86%E6%9B%B4%E5%A4%9A%E8%B5%84%E6%BA%90%E3%80%82
如果您没有时间亲自贡献,但仍希望支持项目的未来发展,我们的一些维护者设有 GitHub 赞助页面:
根据以下任一许可授权:
您可以选择任一许可。
来自真实用户的反馈,见证轩辕镜像的优质服务