Python-Airflow项目执行unittest时报ModuleNotFoundError问题排查
问题:执行Python unittest时出现ModuleNotFoundError错误
执行命令python -m unittest testing.unit_tests.alembic_unittest时,抛出ModuleNotFoundError: No module named 'testing'错误,完整错误栈如下:
ERROR: testing (unittest.loader._FailedTest) ---------------------------------------------------------------------- ImportError: Failed to import test module: testing Traceback (most recent call last): File "/Users/myname/.pyenv/versions/3.10.0/lib/python3.10/unittest/loader.py", line 154, in loadTestsFromName module = __import__(module_name) ModuleNotFoundError: No module named 'testing'
项目结构:
project directory ├── testing ├── __init__.py └── unit_tests ├── __init__.py └── alembic_unittest.py
已尝试在project_directory/testing/__init__.py中添加以下代码,但仍报错:
import sys sys.path.insert(0, 'testing/')
当前PYTHONPATH配置为PYTHONPATH=/Users/myname/.pyenv/versions/3.10.0/lib/python3.10:,使用PyCharm IDE。
错误原因及解决办法
错误原因
- 工作目录错误:执行测试命令时,终端当前目录不是项目根目录(
project directory),导致Python无法定位到testing模块。 - 无效的sys.path配置:在
testing/__init__.py中添加的路径完全无效——Python在找不到testing模块时,根本不会加载这个文件,也就不会执行里面的代码;而且'testing/'是相对路径,即使执行了也无法帮Python找到正确的模块位置。 - PYTHONPATH缺失项目根目录:当前PYTHONPATH仅包含Python标准库路径,没有包含项目根目录,Python无法识别项目下的自定义模块。
解决办法
方法一:切换到项目根目录执行命令
打开终端,切换到project directory的绝对路径下,再执行测试命令:cd /path/to/project directory python -m unittest testing.unit_tests.alembic_unittest方法二:配置PYTHONPATH添加项目根目录
- 临时配置(仅当前终端会话有效):
export PYTHONPATH="/path/to/project directory:$PYTHONPATH" python -m unittest testing.unit_tests.alembic_unittest - PyCharm中永久配置:
- 打开Run/Debug Configurations,找到对应的unittest测试配置
- 在Environment variables中添加
PYTHONPATH,值为项目根目录的绝对路径 - 保存配置后重新运行测试
- 临时配置(仅当前终端会话有效):
方法三:移除无效代码
删除testing/__init__.py中添加的sys.path相关代码,这段代码对解决问题没有任何帮助。
内容的提问来源于stack exchange,提问作者sandeep
相关产品推荐
相关产品推荐

