【问题标题】:What's the difference between setup.py and setup.cfg in python projectspython项目中setup.py和setup.cfg有什么区别
【发布时间】:2017-01-21 22:20:09
【问题描述】:

需要知道 setup.py 和 setup.cfg 有什么区别。两者都在 openstack 项目中得到突出使用

【问题讨论】:

    标签: python python-2.7 openstack setuptools


    【解决方案1】:

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

    setup.cfg 是一个文件,除了在调用python setup.py <somecommand> 时读取命令行外,还可用于指定此类选项。

    documentation for setup.cfg 声明:

    通常,不可能写下构建一个 先验分布:您可能需要从 用户,或从用户的系统,以便继续。只要那样 信息相当简单——要搜索的目录列表 C 例如,头文件或库——然后提供配置 供用户编辑的文件 setup.cfg 是一种廉价且简单的征求意见方式 它。配置文件还允许您为任何 命令选项,然后安装程序可以在 命令行或编辑配置文件。

    【讨论】:

    • 投票并接受答案会很好。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      传统上,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 .
      • @denis 你可能需要-m pep517.build。 (请参阅 meshplex 中的 Makefile。)
      • This stackoverflow answer 解释如何创建带有 c 库扩展的包。它提供了一个示例,其中包含添加到 setup.py 的代码。可以用 setup.cfg 完成等效操作吗?如果是的话,你能举个例子吗?
      • @chmike 对于 C 扩展,您仍然需要保留 setup.py。不过,元数据可以进入setup.cfg。以github.com/nschloe/pygalmesh/blob/main/setup.py 为例。
      猜你喜欢
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2021-12-03
      • 2012-06-30
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多