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 install
python setup.py develop
python setup.py sdist
python setup.py bdist_wheel
应该使用哪些命令来代替?#
已弃用 |
建议 |
---|---|
|
|
|
|
|
|
|
为了安装基于 setuptools 的项目,通常会运行 对于develop模式(又称editable模式)中的安装,可以不使用 构建源代码发布包和轮子的一种推荐的、简单直接的方法是使用build工具,使用类似 在setuptools版本58.3.0中,setup.py
的 install
命令,例如: python setup.py install
。现在,建议的方法是直接使用 pip,并使用类似于以下命令: python -m pip install .
。其中点 .
实际上是文件系统路径,它是当前目录的路径表示法。事实上,pip 接受项目源树目录在本地文件系统上的路径作为其 install
子命令的参数。因此,这也将是一个有效的命令: python -m pip
python setup.py develop
,而使用pip的install子命令的--editable
选项:python -m pip install --editable .
。python -m build
的命令,这会触发生成这两种发布包格式。如有必要,可以使用--sdist
和--wheel
选项,分别只生成其中一种。请注意,build工具需要单独安装。python setup.py install
命令已弃用。
其他命令呢?#
其他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 的范围现在已缩小到构建后端的角色。