Python跨目录导入带依赖文件报错,求最佳解决方法?
解决ModuleNotFoundError: No module named 'variable'的最佳方法
错误根源
当从tests/module/test_main.py导入src.module.main时,Python会以项目根目录作为模块查找基准路径。而main.py里的from variable import c是相对当前文件所在目录的导入,此时Python在项目根目录下找不到variable.py,因此抛出模块未找到的错误。
最佳解决方法
方法1:改用绝对导入(推荐,兼容性更强)
修改src/module/main.py的导入语句为绝对路径导入:
from src.module.variable import c def add(a, b): return a + b + c if __name__ == "__main__": # 直接运行main.py时,自动把项目根目录加入查找路径 import sys, os sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) print(add(1, 2))
修改后:
- 运行
test_main.py时能正常找到variable模块 - 直接运行
main.py也能正常执行;如果不想在main.py里加路径代码,也可以在项目根目录下执行命令:python -m src.module.main
方法2:改用相对导入
修改src/module/main.py的导入语句为相对当前包的导入:
from .variable import c def add(a, b): return a + b + c if __name__ == "__main__": print(add(1, 2))
此时:
- 运行
test_main.py可直接正常执行 - 直接运行
main.py时,必须在项目根目录下执行命令:python -m src.module.main,不能用python src/module/main.py(相对导入无法在顶级脚本中直接使用)
额外优化(可选)
如果是长期维护的项目,建议在项目根目录下创建setup.py或pyproject.toml配置文件,然后执行pip install -e .将项目安装为可编辑模式。这样所有模块会被Python全局识别,无需手动修改sys.path。
内容的提问来源于stack exchange,提问作者MystCabe
相关产品推荐
相关产品推荐

