setup.py 是否已弃用?

不,setup.pySetuptools 并未弃用。

Setuptools 完全可以用作打包 Python 项目的构建后端。并且 setup.pySetuptools 的一个有效配置文件,它恰好是用 Python 编写的,而不是用 *TOML*(例如,类似的做法也用于其他工具,如 nox 及其 noxfile.py 配置文件,或 pytest 和 conftest.py)。

但是,python setup.py 和将 setup.py 用作命令行工具的做法已弃用。

这意味着以下命令**不得**再运行:

  • python setup.py install

  • python setup.py develop

  • python setup.py sdist

  • python setup.py bdist_wheel

应该使用哪些命令来替代?

已弃用

推荐

python setup.py install

python -m pip install .

python setup.py develop

python -m pip install --editable .

python setup.py sdist

python -m build [1]

python setup.py bdist_wheel

为了安装基于 setuptools 的项目,通常运行 setup.pyinstall 命令,例如: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 checkpython setup.py registerpython 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

剩余命令

本指南不提供这些命令的替代解决方案建议

  • alias

  • bdist

  • bdist_dumb

  • bdist_egg

  • bdist_rpm

  • build

  • build_clib

  • build_ext

  • build_py

  • build_scripts

  • clean

  • dist_info

  • easy_install

  • editable_wheel

  • egg_info

  • install_data

  • install_egg_info

  • install_headers

  • install_lib

  • install_scripts

  • rotate

  • saveopts

  • setopt

  • upload_docs

自定义命令呢?

同样,自定义 setup.py 命令已弃用。建议将这些自定义命令迁移到任务运行器工具或任何其他类似工具。此类工具的一些示例包括:chuy、make、nox 或 tox、pydoit、pyinvoke、taskipy 和 thx。

自定义构建步骤呢?

例如,覆盖现有步骤(例如 build_pybuild_extbdist_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 的范围现在已缩小到构建后端的角色。

在哪里可以阅读更多相关信息?