假设以下标准项目结构
- project
-- src
---- __init__.py
---- script1.py
---- script2.py
---- module
---- __init__.py
------ helper.py
-- test
---- __init__.py
---- test_script1.py
---- test_script2.py
---- module
---- __init__.py
------ test_helper.py
script1.py中的以下导入
import script2
from module import helper
和在test_script1.py
中from src import script1
使用以下项目从项目目录调用测试
python -m pytest tests
失败,因为当script1.py尝试导入例如script2,找不到模块,因为root是不包含src的project / test,抛出类似
的东西 ModuleNotFoundError: No module named 'script2'
通过以下方式修改script1.py
from src import script2
from src.module import helper
将在测试时修复导入,但是在尝试运行其根文件夹为src(不包含其自身)的script1时,导入会中断。
我认为这是标准情况,但是我找不到一个干净的解决方案(意味着不依赖sys.path.append('src'))。
中指出的解决方案 Running unittest with typical test directory structure 不考虑src文件夹中的导入。
目前,我的解决方法是将测试文件夹放在src中
- project
-- src
---- __init__.py
---- script1.py
---- script2.py
---- module
---- __init__.py
------ helper.py
---- test
------- __init__.py
------- test_script1.py
------- test_script2.py
------ module
------ __init__.py
-------- test_helper.py
并且具有例如test_script1.py以下导入
import script1
但是我想保留开头提到的文件夹结构。
任何建议我都会想起你。