新建Python项目/tests目录运行pytest出现ModuleNotFoundError如何解决
问题解决方案
核心报错原因
你遇到的ModuleNotFoundError是因为Python运行pytest时,没有将你的项目根目录(即crmpicco包所在的父目录,对应你给出的路径为/private/var/www/crmpicco/)加入模块搜索路径,因此无法识别crmpicco这个包。你新增/删除tests目录下的__init__.py无法解决这个问题,因为问题出在模块搜索路径的配置上。
可用解决方案
你可以选择以下任意一种方案解决导入问题:
- 方案1:新增pytest配置文件
在项目根目录下新建名为pytest.ini的配置文件,写入如下内容:
该配置会让pytest运行时自动将当前根目录加入Python模块搜索路径,即可正常导入[pytest] pythonpath = .crmpicco包。 - 方案2:将项目安装为可编辑模式
如果你项目根目录下有pyproject.toml或者setup.py包管理文件,可以直接在根目录运行如下命令:
该命令会将你的项目注册到当前Python环境的包索引中,无论在哪个路径下运行都可以正常导入pip install -e .crmpicco模块。 - 方案3:临时设置环境变量
运行pytest前先执行环境变量配置命令,将项目根目录加入搜索路径:
配置完成后再运行pytest即可正常导入。# Mac/Linux 终端执行 export PYTHONPATH=/private/var/www/crmpicco/
额外注意:测试代码语法问题
你当前的测试代码存在参数错误,运行时会触发TypeError,需要做如下修改:
pytest的独立测试函数不需要加self参数,同时Legacy类的is_complete方法没有入参,不需要传入self,修改后的测试代码如下:
from crmpicco.subtasks.legacy import Legacy def test_is_complete(): legacy = Legacy() assert legacy.is_complete() == True
内容的提问来源于stack exchange,提问作者crmpicco
相关产品推荐
相关产品推荐

