cibuildwheel

cibuildwheel

跨平台Python wheels构建自动化工具

cibuildwheel是一个自动化Python wheels跨平台构建工具。它支持在Mac、Linux和Windows系统上为多个Python版本构建wheels,并可在多个CI平台运行。该工具能自动处理依赖打包和测试运行,简化了wheels的构建和测试过程。cibuildwheel为需要跨平台分发Python包的开发者提供了高效的解决方案。

cibuildwheelPython跨平台构建CI/CDwheel包Github开源项目

cibuildwheel

PyPI 文档状态 Actions状态 Travis状态 Appveyor状态 CircleCI状态 Azure状态

文档

Python轮子很棒。但在Mac、Linux、Windows上,针对多个Python版本构建它们并不容易。

cibuildwheel来帮忙了。cibuildwheel在你的CI服务器上运行 - 目前支持GitHub Actions、Azure Pipelines、Travis CI、AppVeyor、CircleCI和GitLab CI - 它可以在所有平台上构建和测试你的轮子。

它能做什么?

macOS IntelmacOS Apple SiliconWindows 64位Windows 32位Windows Arm64manylinux<br/>musllinux x86_64manylinux<br/>musllinux i686manylinux<br/>musllinux aarch64manylinux<br/>musllinux ppc64lemanylinux<br/>musllinux s390xPyodide
CPython 3.6不适用不适用不适用
CPython 3.7不适用不适用不适用
CPython 3.8不适用不适用
CPython 3.9✅²不适用
CPython 3.10✅²不适用
CPython 3.11✅²不适用
CPython 3.12✅²✅⁴
CPython 3.13³✅²不适用
PyPy 3.7 v7.3不适用不适用不适用✅¹✅¹✅¹不适用不适用不适用
PyPy 3.8 v7.3不适用不适用✅¹✅¹✅¹不适用不适用不适用
PyPy 3.9 v7.3不适用不适用✅¹✅¹✅¹不适用不适用不适用
PyPy 3.10 v7.3不适用不适用✅¹✅¹✅¹不适用不适用不适用

<sup>¹ PyPy仅支持manylinux轮子。</sup><br> <sup>² Windows arm64支持是实验性的。</sup><br> <sup>³ 从cibuildwheel 2.20开始,CPython 3.13默认使用Python RC版本构建。自由线程模式仍需使用CIBW_FREE_THREADED_SUPPORT选择加入。</sup><br> <sup>⁴ 实验性功能,PyPI尚不支持,但可直接用于Web部署。使用--platform pyodide进行构建。</sup><br>

  • 为CPython和PyPy构建manylinux、musllinux、macOS 10.9+和Windows轮子
  • 适用于GitHub Actions、Azure Pipelines、Travis CI、AppVeyor、CircleCI、GitLab CI和Cirrus CI
  • 通过auditwheeldelocate在Linux和macOS上打包共享库依赖
  • 针对wheel安装版本的库运行你的库的测试

如果你需要构建不受支持的Python版本(如Python 2),请参阅cibuildwheel 1文档

使用方法

cibuildwheel在CI服务内部运行。支持的平台取决于你使用的服务:

LinuxmacOSWindowsLinux ARMmacOS ARMWindows ARM
GitHub Actions✅¹✅²
Azure Pipelines✅²
Travis CI
AppVeyor✅²
CircleCI
Gitlab CI✅¹
Cirrus CI

<sup>¹ 需要模拟,单独分发。其他服务可能也通过模拟或第三方构建主机支持Linux ARM,但这些在我们的CI中未经测试。</sup><br> <sup>² 使用交叉编译。在此CI平台上无法测试arm64</sup>

示例设置

要在GitHub Actions上构建manylinux、musllinux、macOS和Windows轮子,你可以使用以下.github/workflows/wheels.yml

name: 构建 on: [push, pull_request] jobs: build_wheels: name: 在${{ matrix.os }}上构建轮子 runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-13, macos-14] steps: - uses: actions/checkout@v4 # 用于托管cibuildwheel - uses: actions/setup-python@v5 - name: 安装cibuildwheel run: python -m pip install cibuildwheel==2.20.0 - name: 构建轮子 run: python -m cibuildwheel --output-dir wheelhouse # 要提供选项,将它们放在'env'中,如: # env: # CIBW_SOME_OPTION: 值 - uses: actions/upload-artifact@v4 with: name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} path: ./wheelhouse/*.whl

有关更多信息,包括PyPI部署以及其他CI服务或专用GitHub Action的使用,请查看文档示例

工作原理

下图总结了cibuildwheel在每个平台上采取的步骤。

<sup>文档中探索此图的交互版本。</sup>

选项

选项描述
构建选择CIBW_PLATFORM覆盖自动检测的目标平台
CIBW_BUILD <br> CIBW_SKIP选择要构建的Python版本
CIBW_ARCHS更改默认在您的机器上构建的架构
CIBW_PROJECT_REQUIRES_PYTHON手动设置项目的Python兼容性
CIBW_PRERELEASE_PYTHONS启用使用可用的Python预发布版本进行构建
构建定制CIBW_BUILD_FRONTEND设置用于构建的工具,可以是"pip"(目前默认)或"build"
CIBW_ENVIRONMENT设置构建过程中需要的环境变量
CIBW_ENVIRONMENT_PASS_LINUX在主机上设置环境变量以在构建期间传递到容器
CIBW_BEFORE_ALL在构建任何轮子之前在构建系统上执行shell命令
CIBW_BEFORE_BUILD执行shell命令准备每个轮子的构建
CIBW_REPAIR_WHEEL_COMMAND执行shell命令修复每个构建的轮子
CIBW_MANYLINUX_*_IMAGE<br/>CIBW_MUSLLINUX_*_IMAGE指定替代的manylinux / musllinux Docker镜像
CIBW_CONTAINER_ENGINE指定构建Linux轮子时使用的容器引擎
CIBW_DEPENDENCY_VERSIONS指定cibuildwheel如何控制其使用的工具版本
测试CIBW_TEST_COMMAND执行shell命令测试每个构建的轮子
CIBW_BEFORE_TEST在测试每个轮子之前执行shell命令
CIBW_TEST_REQUIRES在运行测试之前安装Python依赖项
CIBW_TEST_EXTRAS使用extras_require安装轮子进行测试
CIBW_TEST_SKIP跳过对某些构建运行测试
其他CIBW_BUILD_VERBOSITY增加/减少pip wheel的输出

这些选项也可以在pyproject.toml文件中指定;请参阅配置

工作示例

以下是一些使用cibuildwheel的仓库。

名称CI操作系统注释
scikit-learn![github icon][]![windows icon][] ![apple icon][] ![linux icon][]机器学习库。使用cibuildwheel的许多功能构建一个具有Cython和C++扩展的大型项目的复杂但干净的配置。
pytorch-fairseq![github icon][]![apple icon][] ![linux icon][]Facebook AI Research用Python编写的序列到序列工具包。
NumPy![github icon][] ![travisci icon][]![windows icon][] ![apple icon][] ![linux icon][]Python科学计算的基础包。
Tornado![github icon][]![linux icon][] ![apple icon][] ![windows icon][]Tornado是一个Python web框架和异步网络库。使用稳定ABI构建小型C扩展。
duckdb![github icon][]![apple icon][] ![linux icon][] ![windows icon][]DuckDB是一个分析型内存SQL数据库管理系统
NCNN![github icon][]![windows icon][] ![apple icon][] ![linux icon][]ncnn是一个为移动平台优化的高性能神经网络推理框架
Matplotlib![github icon][]![windows icon][] ![apple icon][] ![linux icon][]著名的Matplotlib,一个带有C++部分的Python库
Prophet![github icon][]![windows icon][] ![apple icon][] ![linux icon][]用于生成具有多重季节性的时间序列数据的高质量预测的工具,可以是线性或非线性增长。
MyPy![github icon][]![apple icon][] ![linux icon][] ![windows icon][]使用MyPyC编译的MyPy版本。
Kivy![github icon][]![windows icon][] ![apple icon][] ![linux icon][]用Python编写的开源UI框架,可在Windows、Linux、macOS、Android和iOS上运行

ℹ️ 这只是一小部分,还有更多!查看文档中的工作示例页面。

法律说明

由于cibuildwheel使用delocateauditwheel修复轮子,它可能会自动捆绑构建机器上的动态链接库。

这有助于确保库可以在没有pip工具链之外的任何依赖项的情况下运行。

这类似于静态链接,因此可能有一些许可证影响。请检查您引入的任何代码的许可证,以确保允许这样做。

更新日志

v2.20.0

  • 🌟 现在默认构建CPython 3.13轮子 - 无需CIBW_PRERELEASE_PYTHONS标志。是时候构建这些轮子并上传到PyPI了!此版本包括CPython 3.13.0rc1,保证与最终版本ABI兼容。自由线程仍然在标志/配置选项后面。(#1950)
  • ✨ 提供CIBW_ALLOW_EMPTY环境变量作为命令行标志的替代方案。(#1937)
  • 🐛 Windows上的PyPy3.8不使用uv,从0.2.25版本开始停止工作。请注意,PyPy 3.8已经结束生命周期。(#1868)
  • 🛠 根据目标架构设置VSCMD_ARG_TGT_ARCH变量。(#1876)
  • 🛠 撤销pytest 8-8.2上的更清晰输出,现在8.3已经发布。(#1943)
  • 📚 更新示例以在主机上使用Python 3.12(从2024年10月开始,cibuildwheel将要求主机机器上的Python 3.11+)(#1919)

v2.19.2

  • 🐛 更新manylinux2014引脚以支持已结束生命周期的CentOS 7镜像。(#1917)
  • 🐛 支持build[uv]构建前端的--no-isolation。(#1889)
  • 🛠 在https://github.com/pypa/cibuildwheel/attestations提供版本认证。(#1916)
  • 🛠 提供CPython 3.13.0b3。(#1913)
  • 🛠 现在pip 21.1可用,删除一些变通方法。(#1891, #1892)
  • 📚 从我们的文档中删除nosetest。(#1821)
  • 📚 记录GHA上3.8的macOS ARM变通方法。(#1871)
  • 📚 GitLab CI + macOS现在是一个受支持的平台,并有示例。(#1911)

v2.19.1

  • 🐛 Pyodide在GHA上不需要setup-python (#1868)
  • 🐛 为uv指定完整的python路径(修复0.2.10和0.2.11中的问题)(#1881)
  • 🛠 更新CPython 3.13上的pip 24.1b2。(#1879)
  • 🛠 修复我们的模式生成脚本中的警告。(#1866)
  • 🛠 pytest 8-8.2上的更清晰输出。(#1865)

v2.19.0

有关新功能的更多信息,请参阅发布帖子

  • 🌟 添加Pyodide平台。在Linux上使用主机Python 3.12设置 --platform pyodideCIBW_PLATFORM: pyodide 来构建WebAssembly轮子。目前PyPI不接受,但可直接在使用Pyodide的网站中使用,如用于实时文档等。(#1456, #1859)
  • 🌟 添加 build[uv] 后端,它将使用预先存在的uv安装(或安装 cibuildwheel[uv]),并在Python 3.8+上使用 uv 进行所有环境设置和安装。在大多数情况下,这显著提高了速度。(#1856)
  • ✨ 添加macOS自由线程构建并更新CPython至3.13.0b2。(#1854)
  • 🐛 修复了将轮子复制到不存在的输出目录的问题。(#1851, #1862)
  • 🐛 改进了测试环境种子的确定性。(#1835)
  • 🛠 现在设置 VIRTUAL_ENV 变量。(#1842)
  • 🛠 移除pip<21.3的临时解决方案。(#1842)
  • 🛠 重构错误处理以使用异常。(#1719)
  • 🛠 避免测试中的硬编码路径。(#1834)
  • 🛠 使单一Python测试更加通用。(#1835)
  • 🛠 通过拆分仿真测试加快我们的CI速度。(#1839)

v2.18.1

  • 🌟 为3.13添加Linux和Windows的自由线程构建。新标识符 cp313t-*,需要选择使用新选项 CIBW_FREE_THREADED_SUPPORT/tool.cibuildwheel.free-threaded-support查看文档获取更多信息。(#1831)
  • container-engine 现在是一个构建(非全局)选项。(#1792)
  • 🛠 cibuildwheel的构建后端现在是hatchling。(#1297)
  • 🛠 对我们的noxfile进行了重大改进和现代化。(#1823)
  • 🛠 使用pylint的新GitHub Actions报告器替代自定义匹配器。(#1823)
  • 🛠 为Python 3.7+取消固定virtualenv更新(#1830)
  • 🐛 修复从Windows或macOS ARM运行linux测试的问题。(#1788)
  • 📚 修复我们的文档构建。(#1821)

以上是最近几个版本的更新。

ℹ️ 想查看更多更新日志?请访问文档中的更新日志页面

贡献

有关如何为cibuildwheel做出贡献的更多信息,请参阅文档

所有与cibuildwheel项目通过代码库、问题跟踪器、聊天室或其他方式进行互动的人都应遵守PSF行为准则

维护者

致谢

cibuildwheel 站在巨人的肩膀上。

同时也要特别感谢-

  • @zfrenchee 帮助调试许多问题
  • @lelit 提供了一些很棒的错误报告和贡献
  • @mayeut 提供了一个非凡的PR,修补Python本身以获得更好的兼容性!
  • @czaki 在多个PR中成为超级贡献者,并帮助解决了无数问题!
  • @mattip 帮助将PyPy支持添加到cibuildwheel

另请参阅

另一个非常相似的工具值得考虑的是 matthew-brett/multibuildmultibuild 是一个用于在各种平台上构建轮子的shell脚本工具箱。它被用作构建一些大型数据科学工具(如SciPy)的基础。

如果你正在构建Rust轮子,你可以不需要一些让GLIBC通过manylinux工作的技巧;这对于交叉编译尤其重要,而Rust很容易实现交叉编译。查看 maturin-action,这是一个为构建Rust轮子和交叉编译而优化的工具。

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多