使用 tox 和 pyproject.toml

Using tox and pyproject.toml

我正在尝试将项目从使用 setup.py 切换到 PEP518。我写了以下最小的 pyproject.toml:

[build-system]
requires = ["cython", "setuptools", "wheel", "oldest-supported-numpy"]
build-backend = "setuptools.build_meta"

我需要一些依赖于 setup.py 的自定义安装逻辑,因此我目前无法切换到纯声明设置。

值得注意的是,我的 setup.py 包含一个 import numpy,我用它来将 numpy.get_include() 添加到扩展的包含中。我可以使用 python -m build 构建 sdist / wheel,它按预期工作(通过在调用 setup.py 之前安装依赖项来提供构建环境)

我还有一个测试套件,我 运行 使用 tox。但是,当我在我的项目中 运行 tox 时,我看到以下错误:

GLOB sdist-make: /project/setup.py
ERROR: invocation failed (exit code 1), logfile: /project/.tox/log/GLOB-0.log
...
File "/project/setup.py", ...
ModuleNotFoundError: No module named 'numpy'

因此,默认情况下 tox 不会 在构建用于稍后测试的 sdist 之前安装构建依赖项,导致一切失败。

因此,按照 tox example 中的建议,我添加了

[tox]
isolated_build = True

[testenv]
commands = pytest

tox.ini 的顶部,应该 启用隔离构建。但是,当我现在执行 tox 时,我得到的只是

___ summary ___
  congratulations :)

所以实际上没有构建/测试任何东西(与安装了 numpy 的非隔离构建相反)。这是预期的行为吗?如何在隔离环境中实际构建和 运行 测试?

好的,事实证明,隔离构建需要这样的 envlist 才能正常工作(与默认使用当前 python 环境的普通构建相反):

[tox]
isolated_build = True
envlist = py310