是否有理由在 python 项目中同时拥有 tox.ini 和 setup.cfg?

sha*_*wow 4 setuptools tox pyscaffold

我刚刚使用 PyScaffold 搭建了一个 python 项目。引起我注意的一件事是脚手架同时生成了 setup.cfg 和 tox.ini 文件。如果我的理解是正确的,如果我要使用tox命令使用 tox ,它只会查看 tox.ini 文件并完全忽略 setup.cfg 和 setup.py。

在这种情况下,我的问题是:是否有理由将它们都保留在项目中,或者仅使用 tox.ini 或 setup.cfg 就足够了?如果我必须将它们都保留在我的项目中,是否有一种简单的方法让它们都使用相同的配置(例如,运行 flake8 进行 linting 的配置),而我不必在 setup.cfg 和 tox 中键入这些配置。尼?

J.G*_*.G. 6

让我们一步一步来。

PyScaffold 是一种试图简化新 Python 项目设置的工具。

什么是 Python 项目?

从本质上讲,一个可执行的 Python 文件就足够了。

如果要使项目可安装,则需要构建系统的配置文件。

虽然随着时间的推移发生了很多变化,但仍然setup.py是最突出的。在某个时间点,人们发现构建配置文件可以执行任意代码可能不是一个好主意,因此setup.cfg被发明了,您可以在其中以 ini 样式格式定义例如项目名称和依赖项。与此同时,另一种格式被发明出来,pyproject.toml文件。

所以基本上,要构建您的项目,您需要其中之一:

  • 设置文件
  • setup.py 和 setup.cfg(前者只调用后者)
  • pyproject.toml

通常你想为你的项目编写测试。您可以使用内置的unittesttestrunner 来运行您的测试,或者现在许多项目使用pytest. pytest可以配置一个pytest.ini.

测试通常需要一些依赖项,例如pytest它本身和其他一些测试助手。它们需要在某个时间安装。

在这里tox发挥作用。在许多其他功能中,例如针对不同的 Python 版本运行您的测试,tox可以安装您的项目和您的测试需求并执行测试。tox通常带有一个tox.ini文件。

哦,还有掉毛呢?您希望代码易于阅读并遵循 Python 指南(例如 PEP 8),因此您通常使用类似flake8-的工具,它也带有自己的配置文件,即.flake8.

好的,现在我们有很多工具和很多配置文件,但这还不是全部。由于不是每个人都喜欢如此多的配置文件,因此某些工具支持使用其他工具的配置文件进行配置。

例如,您可以flake8在 asetup.cfg和 a 中进行配置tox.ini,请参阅https://flake8.pycqa.org/en/latest/user/configuration.html

您也可以tox通过setup.cfg或 进行配置pyproject.toml,请参阅https://tox.readthedocs.io/en/latest/config.html#configuration-discovery

还有一件重要的事情要知道:您只需要配置一次工具,而不是在所有这些文件中。

因此,从技术上讲,您不需要所有这些文件,这取决于您认为易于阅读且易于管理的项目设置。

在过去的Python Ireland聚会上,我进行了 5 分钟的闪电式演讲,讨论了这一切是如何令人困惑以及我想出了什么解决方案:

https://youtu.be/8iqhNbDHC-c