运行nosetests测试时特定目录结构下的模块导入错误问题
你遇到的错误由两处不规范的导入配置和运行路径问题共同导致:
1. 同目录模块导入写法错误
module_A.py 中使用的 from module_B import function_b 属于绝对导入语法,Python 会直接从系统模块搜索路径 sys.path 下寻找名为 module_B 的顶层模块,而你项目里的 module_B 是 modules 包下的子模块,不属于顶层模块,自然无法被识别。
修复方案:将
module_A.py中的导入语句修改为同包相对导入:from .module_B import function_b
2. 测试命令执行路径错误
你在 project_name/data/test 目录下运行 nosetests,此时 Python 的默认模块搜索路径中没有 project_name/data 目录,测试文件里的 from modules.module_A import function_a 也无法找到 modules 包,即便修复了上面的导入问题依然会报错。
两种修复方案二选一即可:
- 切换到
project_name/data目录下执行测试命令:nosetests test/,此时当前工作目录会被自动加入sys.path,可以正常识别modules包- 运行测试前临时将项目对应目录加入环境变量,Linux/macOS 执行命令:
export PYTHONPATH=/你的实际路径/project_name/data:$PYTHONPATH,Windows CMD 执行命令:set PYTHONPATH=C:\你的实际路径\project_name\data;%PYTHONPATH%,之后再运行测试命令即可。
另外补充:test/__init__.py 中不需要主动导入 test_module_A,nosetests 会自动扫描目录下的测试文件,冗余导入可能会引发额外的导入错误,可直接删除该导入语句。
内容的提问来源于stack exchange,提问作者sergi Justiniano Claramunt
相关产品推荐
相关产品推荐

