工具推荐¶
Python 打包领域包含许多不同的工具。对于许多任务,Python 打包管理机构(PyPA,一个包含许多打包工具并维护本指南的工作组)特意不做出全面的推荐;例如,存在许多构建后端的原因是,为了能够开发出比之前唯一的后端 setuptools 更好地满足某些用户需求的新后端,这个领域被开放了。本指南确实指出了一些被广泛认可的工具,也提出了一些你**不应该**使用的工具,因为它们已被弃用或不安全。
虚拟环境¶
手动创建和使用虚拟环境的标准工具是 virtualenv(PyPA 项目)和 venv(Python 标准库的一部分,尽管缺少 virtualenv 的某些功能)。
安装包¶
pip 是从 PyPI 安装包的标准工具。你可能需要阅读 pip 关于安全安装的建议。Pip 默认在大多数 Python 安装中通过标准库包 ensurepip 提供。
另外,对于通过 PyPI 分发并从命令行运行的 Python 应用程序的特定用例,可以考虑使用 pipx。Pipx 是 pip 和 venv 的一个包装器,它将每个应用程序安装到专用的虚拟环境中。这避免了不同应用程序的依赖项之间以及与使用相同 Python 解释器的系统范围应用程序之间的冲突(尤其是在 Linux 上)。
待办
在此处或新讨论中编写“pip 与 Conda”的比较。
**不要**使用 easy_install
(Setuptools 的一部分),它已被弃用,取而代之的是 pip(详见 pip 与 easy_install)。同样,**不要**使用 python setup.py install
或 python setup.py develop
,它们也已被弃用(背景信息请参见 setup.py 已弃用吗?,迁移建议请参见 如何现代化基于 setup.py 的项目?)。
锁定文件¶
pip-tools 和 Pipenv 是两个公认的工具,用于创建锁定文件,其中包含安装到环境中的所有包的精确版本,以实现可重现性。
构建后端¶
重要提示
请记住:本文档无意引导读者使用特定工具,仅列举常用工具。不同的用例通常需要专门的工作流程。
流行的纯 Python 包构建后端按字母顺序排列如下:
PDM-backend – 与 pdm 一起开发但独立。支持插件。
Poetry-core – 与 poetry 一起开发但独立。支持插件。
与此列表中的其他后端不同,Poetry-core 不支持标准的 [project] table(它在
[tool.poetry]
table 中使用不同的格式)。Setuptools,曾经是唯一的构建后端。支持插件。
注意
如果您使用 setuptools,请注意一些在标准化工作之前的功能现已弃用,并且仅**暂时保留**以兼容。
特别地,**不要**直接调用
python setup.py
。另一方面,使用setup.py
文件配置 setuptools 仍然完全受支持,尽管建议尽可能使用现代的 pyproject.toml 中的 [project] table(或setup.cfg
),并仅在需要程序化配置时才保留setup.py
。请参阅 setup.py 已弃用吗?。您**不应**使用的其他已弃用功能的例子包括
setup()
的setup_requires
参数(请改用pyproject.toml
中的 [build-system] table),以及easy_install
命令(参见 pip vs easy_install)。
**不要**使用 distutils,它已被弃用,并已在 Python 3.12 中从标准库中移除,尽管它仍然可以从 setuptools 获得。
对于带有扩展模块的包,最好使用专门支持扩展模块所用语言的构建系统,例如:
Setuptools – 原生支持 C 和 C++(带有 Go 和 Rust 的第三方插件),
meson-python – C、C++、Fortran、Rust 和 Meson 支持的其他语言,
scikit-build-core – C、C++、Fortran 和 CMake 支持的其他语言,
Maturin – 通过 Cargo 支持 Rust。
构建分发包¶
用于构建源代码分发包和wheels以上传到 PyPI 的标准工具是 build。它将调用您在 pyproject.toml
中声明的任何构建后端。
对于此任务,**不要**使用 python setup.py sdist
和 python setup.py bdist_wheel
。所有直接调用 setup.py
都已弃用。
如果您有扩展模块并希望为多个平台分发 wheel,请使用 cibuildwheel 作为您的 CI 设置的一部分来构建可分发的 wheel。
上传到 PyPI¶
对于托管在或通过受支持的 CI/CD 平台发布的项目,建议使用 受信任发布,它允许包从 CI/CD 工作流安全地上传到 PyPI,而无需手动配置 API 令牌。
截至 2024 年 11 月,PyPI 支持以下平台作为受信任发布提供商:
GitHub Actions (在
https://github.com
上)GitLab CI/CD (在
https://gitlab.com
上)ActiveState
Google Cloud
另一个可用的方法是使用 twine 手动上传包。
危险
**绝不要**使用 python setup.py upload
来执行此任务。除了已弃用之外,它也是不安全的。
工作流工具¶
这些工具是环境管理器,可以自动管理项目的虚拟环境。它们也充当“任务运行器”,允许您定义和调用任务,例如运行测试、编译文档、重新生成一些文件等。其中一些提供了构建分发包和上传到 PyPI 的快捷方式,有些还支持应用程序的锁定文件。它们通常在底层调用上面提到的工具。按字母顺序排列: