Python从子文件夹导入模块时,同级模块导入失败问题求助
问题解决:ModuleNotFoundError: No module named 'common'
问题背景
文件夹结构:
ABC |--db | |-- __init__.py | |-- post.py | |-- common.py | |-- connection.py |-- __init__.py |-- main.py
- main.py中执行
from db import post导入db下的post模块 - post.py中尝试
from common import table_insert,get_row导入同级的common模块,运行时触发ModuleNotFoundError - 已知
/home/user/ABC已在sys.path中,所有__init__.py为空
原因分析
运行main.py时,Python的模块搜索范围是sys.path中的目录(这里是ABC目录)。直接写from common import...会让Python在ABC目录下找common.py,但实际common.py在db子目录里,因此找不到模块。
可行解决方案
方案1:使用相对导入
修改post.py中的导入语句为:
from .common import table_insert, get_row
这里的.代表当前模块所在的包(即db包),告诉Python从同级目录下导入common模块。
方案2:使用绝对导入
基于已在sys.path中的ABC目录,使用完整的包路径导入:
from db.common import table_insert, get_row
这种写法明确指定从db包下导入common模块,Python会直接在sys.path的ABC目录中找到db.common模块。
内容的提问来源于stack exchange,提问作者Voelv
相关产品推荐
相关产品推荐

