setup.py 是否已弃用?¶
不,setup.py 和 Setuptools 并未弃用。
Setuptools 完全可以用作打包 Python 项目的构建后端。并且 setup.py 是 Setuptools 的一个有效配置文件,它恰好是用 Python 编写的,而不是用 *TOML*(例如,类似的做法也用于其他工具,如 nox 及其 noxfile.py 配置文件,或 pytest 和 conftest.py)。
但是,python setup.py 和将 setup.py 用作命令行工具的做法已弃用。
这意味着以下命令**不得**再运行:
python setup.py installpython setup.py developpython setup.py sdistpython setup.py bdist_wheel
应该使用哪些命令来替代?¶
已弃用 |
推荐 |
|---|---|
|
|
|
|
|
|
|
为了安装基于 setuptools 的项目,通常运行 setup.py 的 install 命令,例如:python setup.py install。现在,推荐的方法是直接使用 pip,命令如下:python -m pip install .。其中点 . 实际上是一个文件系统路径,它是当前目录的路径表示。实际上,*pip* 接受本地文件系统上项目源目录的路径作为其 install 子命令的参数。所以这也会是一个有效的命令:python -m pip install path/to/project。
至于 *develop* 模式,也就是 *editable* 模式的安装,而不是 python setup.py develop,可以使用 pip 的 *install* 子命令的 --editable 选项:python -m pip install --editable .。
一种推荐的、简单直接的构建源代码分发和wheel的方法是使用 build 工具,命令如 python -m build,它会触发两种分发格式的生成。如有必要,可以使用 --sdist 和 --wheel 选项只生成其中一种。请注意,构建工具需要单独安装。
命令 python setup.py install 已在 setuptools 58.3.0 版本中弃用。
其他命令呢?¶
其他 python setup.py 命令有哪些替代方案?
python setup.py test¶
建议使用测试运行器,例如 pytest。
python setup.py check、python setup.py register 和 python setup.py upload¶
一个可靠的替代方案是 twine
python -m twine check --strict dist/*python -m twine register dist/*.whl[2]python -m twine upload dist/*
python setup.py --version¶
一种可能的替代方案(除其他外)是依赖 setuptools-scm
python -m setuptools_scm
剩余命令¶
本指南不提供这些命令的替代解决方案建议
|
|
|
|
自定义命令呢?¶
同样,自定义 setup.py 命令已弃用。建议将这些自定义命令迁移到任务运行器工具或任何其他类似工具。此类工具的一些示例包括:chuy、make、nox 或 tox、pydoit、pyinvoke、taskipy 和 thx。
自定义构建步骤呢?¶
例如,覆盖现有步骤(例如 build_py、build_ext 和 bdist_wheel)或添加新构建步骤的自定义构建步骤并未弃用。它们将按预期自动调用。
setup.py 应该被删除吗?¶
尽管 setup.py 作为可执行脚本的使用已被弃用,但它作为 setuptools 配置文件使用是完全可以的。可能不需要修改 setup.py。
pyproject.toml 是强制性的吗?¶
虽然它在技术上并非强制性,但强烈建议项目在其源代码树的根目录下拥有一个 pyproject.toml 文件,其内容如下:
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
指南 如何现代化基于 setup.py 的项目? 提供了更多详细信息。
在缺少 pyproject.toml 文件及其 [build-system] 表的情况下,构建前端的标准回退行为是假定 构建后端 是 setuptools。
为什么?这意味着什么?¶
一种看法是,setuptools 的范围现在已缩小到构建后端的角色。
在哪里可以阅读更多相关信息?¶
为什么不应该直接调用 setup.py,作者 Paul Ganssle