python项目中的setup.py和setup.cfg有什么区别

Bha*_*waj 6 python setuptools python-2.7 openstack

需要知道setup.py和setup.cfg之间的区别。两者都在openstack项目中得到显着使用

Nic*_*mer 42

传统上,setup.py已经被用来构建一个 Python 包,即,

python setup.py build
Run Code Online (Sandbox Code Playgroud)

像任何旧的 Python 文件一样,setup.py可以包含大量代码。然而,在大多数情况下,它纯粹是声明性的,只是简单地列出了包属性,例如,

python setup.py build
Run Code Online (Sandbox Code Playgroud)

事实上,有些人认为它不好的风格把太多逻辑setup.py。为了反映这一点,setup.cfg(设计上是声明性的)在包装中变得越来越流行:

[metadata]
name = foobar
version = 0.1.0
author = John Doe
# ...
Run Code Online (Sandbox Code Playgroud)

这样做的优点是打包软件(例如 setuptools)不需要评估Python 文件来获取元数据,而是可以简单地解析配置文件。

你可以添加一个假人setup.py

from setuptools import setup

setup(
    name="foobar",
    version="0.1.0",
    author="John Doe",
    # ...
)
Run Code Online (Sandbox Code Playgroud)

或者使用完整的PEP 517 / 518并添加一个pyproject.toml.

[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用pypa-build ( pip install build) 和

python3 -m build --sdist --wheel .
Run Code Online (Sandbox Code Playgroud)

话虽如此,目前(2019/2020 年)Python 打包软件的前景非常活跃,尚不清楚未来定义 Python 包的首选方法是哪种。例如,有PEP 621建议将包元数据放入pyproject.toml.

  • 没有 `setup.py` 的包?`pip install --editable .` 可能会引发“错误:找不到文件“setup.py”...(找到了“pyproject.toml”文件,但可编辑模式当前需要基于 setup.py 的构建。)”关于“meshplex”的示例。 (6认同)
  • 我认为这是一个很好的答案,但老实说,它主要让我对应该在新包中创建哪些文件更加困惑。 (4认同)
  • @chmike对于C扩展,你仍然需要保留一个“setup.py”。不过,元数据可以进入“setup.cfg”。查看 https://github.com/nschloe/pygalmesh/blob/main/setup.py 作为示例。 (2认同)

lan*_*tar 10

setup.py是包含如何构建软件的实际说明的文件。这些说明可能有一些配置选项,例如对于单元测试,您可能能够指示是否应该计算测试覆盖率,或者安装前缀等。

setup.cfg是一个文件,除了在调用python setup.py <somecommand>.

状态的文档setup.cfg

通常,不可能先验地写下构建发行版所需的所有内容:您可能需要从用户或用户系统获取一些信息,以便继续。只要该信息相当简单——例如用于搜索 C 头文件或库的目录列表——那么提供配置文件 setup.cfg 供用户编辑是一种廉价且简单的请求方式。配置文件还允许您为任何命令选项提供默认值,然后安装程序可以在命令行上或通过编辑配置文件来覆盖这些默认值。

  • 投票并接受答案会非常好。 (3认同)

Aks*_*hvi 5

setup.py是python软件包不可分割的一部分,其中包含有关应作为软件包的文件的详细信息。这包括安装和运行Python软件包所需的依赖项,入口点,许可证等。

setup.cfg另一方面,它是有关您希望创建的任何插件的设置或发行类型的更多信息。bdist / sdist以及通用或核心python轮的进一步分类。它还可以用于配置的某些元数据setup.py