我通常以这种方式构建我的项目:
root
src
__init__,py
main.py
utils.py
xyz.py
tests
__init__.py
test_main.py
test_utils.py
test_xyz.py
README.md
LICENSE
Other stuff...
在测试中,我导入需要使用
from src.main import my_function
等导入来测试的函数
然后使用
python -m unittest discover
从根运行测试
这很有用……有点。如果
main.py
导入 src
包中的其他模块(例如 import utils
),则测试会崩溃并出现 ImportError。原因是unittest将启动目录添加到PATH中,因此它识别src.main
,但不识别其中的相对导入。
我找到的解决方案是在
test/__init__.py
中插入这样的语句:
import sys
sys.path.append("./src")
这会将整个 src 文件夹添加到 PYTHONPATH 中。它有效,但我觉得这很丑陋。还有哪些其他可用的解决方案?检查类似的问题,我没有找到允许运行测试并执行主包而无需每次更改代码的解决方案...
有什么想法吗?谢谢!
我总是向人们指出Python 打包用户指南中的打包建议。创建
pyproject.toml
文件支持您对包执行 pip install
。在开发过程中,您可以在开发模式中进行安装。
这将允许您的测试以熟悉的 Python 风格导入函数:
from <your_package>.main import my_function
from <your_package>.utils import my_util_func
如果您这样做,则无需摆弄路径设置