想了解setup.py和setup.cfg之间的区别。这两者在OpenStack项目中都被广泛使用。
想了解setup.py和setup.cfg之间的区别。这两者在OpenStack项目中都被广泛使用。
传统上,setup.py
用于构建 Python 包,即
python setup.py build
与任何旧的Python文件一样,setup.py
可以包含大量代码。然而,在大多数情况下,它纯粹是声明性的,只是简单地列出软件包属性,例如:
from setuptools import setup
setup(
name="foobar",
version="0.1.0",
author="John Doe",
# ...
)
事实上,有些人认为在setup.py
中放置大量逻辑并不好。 为了反映这一点,setup.cfg
(根据设计是声明性的)已经变得更加流行用于打包:
[metadata]
name = foobar
version = 0.1.0
author = John Doe
# ...
这样做的好处在于打包软件(例如 setuptools)无需评估Python文件即可获取元数据,而只需解析配置文件。
您可以添加一个虚拟的setup.py
文件,
from setuptools import setup
if __name__ == "__main__":
setup()
或者完全采用PEP 517/518,并添加一个pyproject.toml
文件。
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
您可以使用pypa-build(pip install build
)来构建您的项目。
python3 -m build --sdist --wheel .
自从2020年起,pyproject.toml
也可以包含元数据了,所以你不再需要setup.cfg
了。数据布局看起来有点像setup.cfg
,但遵循标准化的TOML格式:
[build-system]
requires = ["setuptools>=61"]
build-backend = "setuptools.build_meta"
[project]
name = "foobar"
version = "0.1.0"
authors = [{name = "John Doe", email = "john@doe.com"}]
# [...]
一个设计目标是多个构建系统都将支持它(如setuptools、flit、Poetry等)。截至2022年,在安装该软件包时,setuptools仍会给出一个“实验性”警告,但这可能很快就会消失。
setup.py
的包怎么办?例如在 meshplex
上,执行 pip install --editable .
会出现 "ERROR: File "setup.py" not found ... (A "pyproject.toml" file was found, but editable mode currently requires a setup.py based build.)" 错误。 - denis-m pep517.build
。(请参见 meshplex 中的 Makefile。) - Nico Schlömersetup.cfg
来实现相同的效果?如果可以,能否给出一个示例? - chmikesetup.py
。但是元数据可以放入setup.cfg
中。请参考https://github.com/nschloe/pygalmesh/blob/main/setup.py作为示例。 - Nico Schlömersetup.py
是实际构建软件的文件,其中包含构建指令。这些指令可能具有一些配置选项,例如针对单元测试,您可以指示是否应计算测试覆盖率或安装前缀等。
setup.cfg
是一个文件,可以用来指定这些选项,除了在调用 python setup.py <somecommand>
时读取命令行。
关于setup.cfg
的文档中指出:
通常情况下,事先无法写下构建分发所需的所有内容:您可能需要从用户或用户系统中获取一些信息才能继续。只要该信息相当简单 - 例如要搜索C头文件或库的目录列表 - 那么提供一个配置文件setup.cfg,让用户进行编辑是一种廉价且简便的方法。配置文件还可以让您为任何命令选项提供默认值,安装程序可以通过命令行或编辑配置文件来覆盖这些默认值。
setup.py
是 Python 包的重要组成部分,其中包括有关应该成为包的文件的详细信息或信息。这包括安装和运行你的 Python 包所需的必需依赖项、入口点、许可证等。
另一方面,setup.cfg
更多地涉及任何插件的设置或您希望创建的发行类型的设置。bdist/sdist 和进一步分类为通用或核心-Python 轮。它还可用于配置 setup.py
的某些元数据。
pyproject.toml
。 - djvgsetuptools
的文档中提供了一个有用的比较。 - djvg