Python跨目录导入依赖其他模块的模块报错解决方法咨询
解决跨目录导入依赖同目录模块的问题
问题原因
当你在tests/test1.py中导入src.file1时,Python的模块查找路径是以当前运行脚本(test1.py)所在的tests目录为基准的。而file1.py里用from file2 import module2是尝试从当前运行路径(tests目录)找file2,自然找不到,所以报ModuleNotFoundError。
解决方案
方案1:将src转为Python包(推荐,规范做法)
- 在
src目录下创建一个空的__init__.py文件,让src成为可识别的Python包:src __init__.py file1.py file2.py tests test1.py - 修改
file1.py的导入语句为相对导入,表示从当前包(src)下导入file2:# file1.py from .file2 import module2 modules = 'module1' + module2 - 保持
test1.py的代码不变,直接运行即可,此时Python会从src包中正确找到file2模块。
方案2:使用绝对导入(同样需要src作为包)
如果不习惯相对导入,也可以修改file1.py用绝对导入方式,明确指定从src包导入file2:
# file1.py from src.file2 import module2 modules = 'module1' + module2
同样需要先给src目录添加__init__.py,test1.py代码不变,运行即可。
方案3:临时修改file1的模块查找路径(适合小型项目快速解决)
如果不想把src做成包,可以在file1.py开头添加代码,把自身所在的src目录加入Python的模块查找路径:
# file1.py import os import sys # 把当前脚本所在目录加入sys.path sys.path.append(os.path.dirname(os.path.abspath(__file__))) from file2 import module2 modules = 'module1' + module2
这样不管从哪个目录导入file1,它都会自动把src目录加到路径里,从而找到file2模块。
内容的提问来源于stack exchange,提问作者Michael Xia
相关产品推荐
相关产品推荐

