【发布时间】:2017-01-21 22:20:09
【问题描述】:
需要知道 setup.py 和 setup.cfg 有什么区别。两者都在 openstack 项目中得到突出使用
【问题讨论】:
标签: python python-2.7 openstack setuptools
需要知道 setup.py 和 setup.cfg 有什么区别。两者都在 openstack 项目中得到突出使用
【问题讨论】:
标签: python python-2.7 openstack setuptools
setup.py 是包含如何构建软件的实际说明的文件。这些说明可能有一些配置选项,例如对于单元测试,您可能能够指示是否应该计算测试覆盖率,或者安装前缀等。
setup.cfg 是一个文件,除了在调用python setup.py <somecommand> 时读取命令行外,还可用于指定此类选项。
documentation for setup.cfg 声明:
通常,不可能写下构建一个 先验分布:您可能需要从 用户,或从用户的系统,以便继续。只要那样 信息相当简单——要搜索的目录列表 C 例如,头文件或库——然后提供配置 供用户编辑的文件 setup.cfg 是一种廉价且简单的征求意见方式 它。配置文件还允许您为任何 命令选项,然后安装程序可以在 命令行或编辑配置文件。
【讨论】:
setup.py 是 python 包的一个组成部分,其中包含有关应该作为包的文件的详细信息或信息。这包括安装和运行 Python 包所需的依赖项、入口点、许可证等。
另一方面,setup.cfg 更多的是关于任何插件的设置或您希望创建的分发类型。 bdist/sdist 以及通用或核心 python 轮的进一步分类。也可以用来配置setup.py的一些元数据。
【讨论】:
传统上,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 .
话虽如此,Python 打包软件的前景目前(2019 年 20 月 21 日)非常活跃,尚不清楚未来定义 Python 包的首选方法是哪种。例如,PEP 621 建议将包元数据放入pyproject.toml。
【讨论】:
setup.py 的包? pip install --editable . 可以引发“错误:找不到文件“setup.py”...(找到“pyproject.toml”文件,但可编辑模式当前需要基于 setup.py 的构建。)”例如在 meshplex .
-m pep517.build。 (请参阅 meshplex 中的 Makefile。)
setup.cfg 完成等效操作吗?如果是的话,你能举个例子吗?
setup.py。不过,元数据可以进入setup.cfg。以github.com/nschloe/pygalmesh/blob/main/setup.py 为例。