【发布时间】:2021-07-14 11:29:51
【问题描述】:
作为参考,这是this question 的相反。该问题询问如何让 pytest 使用您的本地模块。我想避免 pytest 使用本地模块。
我需要测试我的模块的安装过程。我们都应该测试我们模块的安装程序。因此,我希望我的测试套件假装它是尝试导入我已安装的模块的任何其他 python 模块(无论它是否是最新的我的最新编辑和/或可编辑安装是我的事)。
我的项目布局如下:
.
├── my_package
│ ├── __init__.py
│ └── my_module.py
├── setup.py
├── pyproject.toml
└── tests
├── conftest.py
├── __init__.py
└── test_my_package.py
如果我
pip install .
cd tests
python -c "import my_package"
一切正常。但是,如果我
pip install .
pytest
它没有。这是因为 pytest 会自动将调用目录添加到 PYTHONPATH,从而无法测试 pip install 是否有效。我希望它不要那样做。
我需要这样做,因为我正在使用setuptools-scm(在可编辑和不可编辑安装中具有不同的行为)和setuptools.find_packages,这使得忽略子包变得容易。但是,重申一下,我的问题在于 pytest 的发现,而不是使用这两个实用程序。
【问题讨论】:
-
如果在运行 pytest 之前将
cd转换为tests会怎样? -
相同的行为。一种解决方法是在
import my_module之前将import sys; sys.path.pop(0)添加到我的conftest.py,但这并不漂亮。 -
这似乎是重复的,但答案不太令人信服stackoverflow.com/questions/19530849/…
-
是的,这似乎是同一个问题 - 没有出现在我的搜索中。但你是对的,没有令人满意的答案。
标签: python unit-testing pytest pythonpath