运行pytest报错ModuleNotFoundError: No module named 'src'求助
解决pytest中ModuleNotFoundError: No module named 'src'的问题
不需要在src目录的__init__.py中导入模块来解决该问题,空的__init__.py已经足够将src标记为Python包。以下是具体的解决方案和原因分析:
核心原因
尽管你已经将/Users/xxx/projects/myproject加入sys.path,但可能存在以下问题:
- 运行pytest时的工作目录不是
myproject,导致Python无法从当前工作目录识别到src包; - pytest的导入逻辑可能会调整
sys.path,覆盖了你手动设置的路径。
具体解决方案
1. 在项目根目录运行pytest
切换到myproject目录下执行pytest命令:
cd /Users/xxx/projects/myproject pytest
此时Python会从根目录识别到src包,导入语句from src.module1 import myfunc就能正常工作。
2. 使用pytest的--pythonpath参数指定项目根目录
如果不想切换目录,可以在运行pytest时直接指定项目根路径:
pytest --pythonpath=/Users/xxx/projects/myproject
该参数会将指定路径添加到Python的模块搜索路径中,确保src包能被找到。
3. 将项目安装为可编辑模式(推荐)
在myproject目录下执行以下命令,将项目以可编辑模式安装到Python环境:
pip install -e .
这会在Python的site-packages中创建一个指向项目src目录的链接,无论你在哪里运行测试,都能直接导入src下的模块,这是Python项目开发的标准做法,同时支持后续的打包发布。
4. 调整导入语句(不推荐)
如果上述方法无法满足需求,可以尝试使用相对导入,但需要将test目录也标记为Python包(添加空的__init__.py),然后修改test_module1.py中的导入语句:
from ..src.module1 import myfunc
不过这种方式可能会导致直接运行测试文件时出错,因为相对导入仅在模块作为包的一部分被导入时生效。
内容的提问来源于stack exchange,提问作者JayCo741
相关产品推荐
相关产品推荐

