我有一个这样的项目结构:
project_root/
├─ __init__.py
├─ src/
│ ├─ __init__.py
│ ├─ etl/
│ ├─ __init__.py
│ ├─ module1.py
│ ├─ module2.py
│
├─ tests/
├─ __init__.py
├─ module_tests/
├─ __init__.py
├─ conftest.py
├─ test_module1.py
├─ test_module2.py
模块 1 和 2 必须从命令行运行,并且由于项目的奇怪限制只能使用python -m
命令运行。因此,在我的测试模块中,我有这样的东西。
from subprocess import run
def test_module_1(request):
assert run("python -m src.etl.module1") == 0
不幸的是,出于上述相同的原因,我无法使用pytest tests/module_tests/
. 我必须使用python -m pytest tests/module_tests/
. 然而,问题在于,当我以这种方式运行它时run
,测试方法中的命令无法找到module1
并引发FileNotFoundError
. 我尝试pwd
在测试中运行一个命令,它返回正确的根路径。我还尝试使用打印当前工作目录,os.getcwd()
但它仍然是正确的根路径。使用手动将工作目录更改为项目根目录os.chdir
也不起作用。我已经在网上检查了多个帖子和问题以找到解决方案,但到目前为止还没有找到任何东西。有谁知道如何解决这个问题?谢谢。
更新 1
正如有人在另一个问题中提到的那样,我只是尝试将 conftest.py 移动到项目根目录,但它仍然没有帮助。
更新 2
使用os.system
而不是subrpocess.run
似乎有效。但现在我无法得到命令的结果。