作为参考,这是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的发现,而不是这两个实用程序的使用
解决方法是通过将
tests/conftest.py
更改为包含,手动编辑PYTHONPATH在第一次导入
my_module
之前,但它并不漂亮,并假设该项将在PYTHONPATH中的何处显示。当然,可以添加更多代码来显式检查,但这真的很难看:相关问题 更多 >
编程相关推荐