Python跨祖父目录模块导入报错的解决方法及运行路径
Python跨目录模块导入问题解决
问题背景
文件结构:
directory_0 ├── directory_1 │ └── directory_2 │ ├── __init__.py # 定义方法A,需从file_2.py导入方法B │ └── file_1.py # 导入__init__.py中的方法A └── directory_3 └── file_2.py # 定义方法B
在/directory_0/directory_1/directory_2路径下执行python file_1.py时,报错:ModuleNotFoundError: No module named directory_3.file_2。
解决方案
方案1:规范路径运行(推荐)
Python模块搜索默认以当前运行目录为基准之一,切换到directory_0目录下执行脚本:
cd /directory_0 python directory_1/directory_2/file_1.py
同时修改directory_1/directory_2/__init__.py的导入语句为绝对导入:
from directory_3.file_2 import B def A(): # 方法A的实现逻辑 pass
此方式完全符合Python模块导入规范,无需额外修改代码。
方案2:临时扩展模块搜索路径
如果必须在directory_2目录下运行,在file_1.py的最顶部添加以下代码,将directory_0加入模块搜索路径:
import sys import os # 向上回溯两级目录,获取directory_0的绝对路径 root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../')) sys.path.append(root_path) # 正常导入方法A from . import A
__init__.py中的导入语句保持绝对导入即可:
from directory_3.file_2 import B def A(): # 方法A的实现逻辑 pass
运行路径建议
优先选择directory_0作为运行目录,这是最符合Python模块设计逻辑的方式,能避免后续导入其他模块时出现类似问题。
内容的提问来源于stack exchange,提问作者SKSKSKSK
相关产品推荐
相关产品推荐

