Python单元测试目录结构问题:无法导入src模块
Python单元测试模块导入问题解决办法
项目目录结构
my-project src/ __init__.py script.py test/ __init__.py test_script.py
测试代码(test_script.py)
from src.script import my_object import unittest class TestClass(unittest.TestCase): def test_script_object(self): # 单元测试逻辑 pass if __name__ == '__main__': unittest.main()
(注:你代码里的__name__ == 'main'存在拼写错误,正确写法是__name__ == '__main__',这个小问题也会影响测试执行)
遇到的错误
Traceback (most recent call last): File "test_script.py", line 4, in <module> from src.script import my_object ModuleNotFoundError: No module named 'src'
解决方案与优化建议
方法1:从项目根目录运行测试
无需修改任何代码,直接在my-project目录下执行命令:
python -m unittest test/test_script.py
如果使用pytest框架(需先执行pip install pytest安装),可以用:
pytest test/test_script.py -v
这种方式会自动将项目根目录加入Python的模块搜索路径,自然能识别src模块。
方法2:使用相对导入
修改test_script.py的导入语句为相对路径:
from ..src.script import my_object
但这种方式不能直接运行test_script.py,必须从项目根目录以模块方式执行:
python -m unittest test.test_script
方法3:设置PYTHONPATH环境变量
运行测试前,把项目根目录添加到PYTHONPATH中:
- Linux/macOS终端:
export PYTHONPATH=/绝对路径/to/my-project python test/test_script.py - Windows命令提示符:
set PYTHONPATH=C:\绝对路径\to\my-project python test\test_script.py
这样Python会优先从该路径搜索模块,无需修改代码即可正常导入。
方法4:把src做成可安装包(推荐长期项目使用)
在my-project根目录下创建pyproject.toml文件,内容如下:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my-project" version = "0.1.0" packages = ["src"]
然后执行本地安装命令:
pip install -e .
安装完成后,无论在哪个目录,都能直接import src.script,测试代码无需修改,直接运行即可正常工作。
内容的提问来源于stack exchange,提问作者ellen
相关产品推荐
相关产品推荐

