从外部文件夹导入含内部依赖的Python模块遇ModuleNotFoundError怎么办
解决跨目录导入时找不到同模块依赖的问题
问题原因
当从外部文件夹导入abc.py时,Python的模块搜索路径默认以当前运行脚本的目录为基准,而非abc.py所在的目录。abc.py里直接写import xyz,只有当运行脚本与abc.py、xyz.py在同一目录时才有效,外部导入时自然找不到xyz模块。
解决方法
方法1:使用相对导入
将abc.py中的导入语句修改为相对导入,明确指定xyz是当前模块的同级模块:
from . import xyz as npc
若需要直接运行abc.py(而非作为模块导入),相对导入会报错,可加判断兼容两种场景:
if __name__ == "__main__": # 直接运行abc.py时使用绝对导入 import xyz as npc else: # 作为模块被导入时使用相对导入 from . import xyz as npc
方法2:手动将abc所在目录添加到Python搜索路径
在abc.py开头添加代码,把自身所在目录加入Python模块搜索路径:
import sys import os # 获取abc.py所在的绝对目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 将该目录添加到搜索路径 sys.path.append(current_dir) import xyz as npc
这种方式无需修改导入习惯,且不管从哪个目录导入abc.py,都能找到同级的xyz.py。
方法3:将stable目录转为Python包
在stable目录下创建空的__init__.py文件,把整个目录变成可导入的Python包。此时abc.py里可选择以下导入方式:
# 包内绝对导入 from stable import xyz as npc # 或者继续用相对导入 from . import xyz as npc
这种方式更符合Python模块化规范,适合长期维护的项目。
内容的提问来源于stack exchange,提问作者OldIndianProgrammer
相关产品推荐
相关产品推荐

