setup.py 已弃用?#

否,setup.pySetuptools 尚未弃用。

Setuptools 完全可用作 Python 项目打包的 构建后端。而 setup.pySetuptools 的有效配置文件,碰巧用 Python 编写,而不是用 TOML 编写(例如,nox 和其 noxfile.py 配置文件,或 pytestconftest.py 使用了类似的做法)。

但是, python setup.pysetup.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

对于develop模式(又称editable模式)中的安装,可以不使用python setup.py develop,而使用pip的install子命令的--editable选项:python -m pip install --editable .

构建源代码发布包轮子的一种推荐的、简单直接的方法是使用build工具,使用类似python -m build的命令,这会触发生成这两种发布包格式。如有必要,可以使用--sdist--wheel选项,分别只生成其中一种。请注意,build工具需要单独安装。

在setuptools版本58.3.0中,python setup.py install命令已弃用。

其他命令呢?#

其他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

  • 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 的范围现在已缩小到构建后端的角色。

在哪里可以阅读更多关于此内容的信息?#