You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Maturin为Python≥3.9构建跨架构Python包的疑问

针对Rust/PyO3扩展包分发的问题解答

当前版本回顾

此前纯Python包通过setuptools构建,生成的是跨平台、跨Python版本的sdist和any wheel,所有用户都能直接安装。

新版本现状

改用PyO3+Maturin后,本地Windows Python3.11环境下生成的是仅适配Windows AMD64架构、Python3.11版本的wheel,以及包含Rust源码的sdist。


问题1:将这些文件上传至PyPI会给用户带来问题吗?

直接上传没问题,但存在局限性:

  • 只有Windows AMD64平台、Python3.11的用户能直接安装预编译的wheel;
  • 其他平台(Linux/macOS)或Python版本(3.9/3.10/3.12+)的用户,pip会自动 fallback 到源码包安装,这要求用户必须有Rust工具链,否则会安装失败。

问题2:未安装Rust的用户能否通过源码分发安装该包?

不能。源码包(tar.gz)包含Rust扩展的源代码,安装时Maturin会调用Rust编译器将其编译为适配用户系统的二进制文件。没有Rust环境的话,pip会抛出编译失败的错误,无法完成安装。

问题3:源码分发是否也需要依赖架构?

源码包本身不依赖架构——它是纯文本/源码文件,可以在任何平台上下载。但安装过程中会生成依赖架构的二进制产物:用户安装源码包时,会在本地编译出适配自身系统架构(比如Linux x86_64、macOS ARM64)的扩展文件,最终运行的二进制是和用户系统绑定的,但源码包本身是跨平台的。

问题4:如何通过Maturin生成支持所有Python≥3.9版本的wheel?

有两种可行方案:

  1. 本地多Python版本构建
    先在本地安装好Python3.9、3.10、3.11、3.12等目标版本,然后针对每个版本单独运行构建命令:

    # 针对Python3.9
    maturin build --release --bindings pyo3 --interpreter python3.9
    # 针对Python3.10
    maturin build --release --bindings pyo3 --interpreter python3.10
    # 以此类推
    

    也可以一次性指定多个解释器:

    maturin build --release --bindings pyo3 --interpreter python3.9 python3.10 python3.11 python3.12
    

    这样会生成对应每个Python版本的wheel(文件名带cp39、cp310等后缀)。

  2. CI自动化多平台/多版本构建(推荐)
    手动本地构建效率低且容易遗漏平台,推荐用CI工具(比如GitHub Actions)配合cibuildwheel,自动为Windows、macOS、Linux的各种架构,以及所有Python3.9+版本构建预编译wheel。只需要在项目中配置cibuildwheel的参数,它会自动调用Maturin完成构建,无需本地维护多环境。


内容的提问来源于stack exchange,提问作者Attack68

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:33:40