Python跨目录导入模块时出现ModuleNotFoundError问题咨询
报错原因与解决方法
你使用的相对路径../folder2/是相对于执行脚本时的终端工作目录,而非file1.py文件本身所在的目录,只要运行脚本时的工作目录不是folder1,这个相对路径就会指向错误的位置,自然找不到目标模块。Python 3.3+已经支持隐式命名空间包,不需要手动添加__init__.py也能识别目录为可导入的包,你之前添加__init__.py后依旧报错的核心原因就是路径指向错误,和是否有__init__.py无关。
方案1:动态添加绝对路径(无额外配置要求,最稳妥)
通过__file__变量获取当前脚本的固定绝对路径,拼接得到folder2的真实路径后加入搜索路径,完全不受运行时工作目录影响:
import sys import os # 取当前file1.py所在目录的绝对路径 curr_file_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接得到folder2的绝对路径 folder2_abs_path = os.path.join(curr_file_dir, "..", "folder2") # 转为规范绝对路径后加入搜索路径,避免路径歧义 sys.path.insert(0, os.path.abspath(folder2_abs_path)) from file2 import foo foo()
方案2:配置PYTHONPATH(适合长期项目使用)
把project目录的绝对路径添加到系统的PYTHONPATH环境变量中,之后可以直接用项目根目录为基准的绝对导入,不需要额外修改sys.path:
from folder2.file2 import foo foo()
内容的提问来源于stack exchange,提问作者user11804312
相关产品推荐
相关产品推荐

