Python从子文件夹导入模块遇ImportError:相对导入无已知父包
Python相对导入报错问题解决
问题描述
项目文件夹结构如下:
project\ main_code.py code\ __init__.py s_utils.py data\
在main_code.py中执行以下代码:
import os os.chdir('absolute path to project folder') from .code import s_utils
触发错误:
ImportError: attempted relative import with no known parent package
问题原因
相对导入(带.的写法)是Python包内部模块间的导入规则,要求当前脚本是包的组成部分而非独立顶层脚本。直接运行main_code.py时,Python会将其识别为独立的顶层脚本,不会把它归到project包下,自然找不到对应的父包,因此抛出错误。
解决方案
方案1:改用绝对导入
既然已经通过os.chdir切换到项目根目录,此时项目根目录会被加入Python的搜索路径,直接使用绝对导入即可:
import os os.chdir('absolute path to project folder') from code import s_utils
方案2:将项目作为包运行
在项目的父目录下,用模块方式运行main_code.py,让Python把project当作包,main_code.py作为包的子模块,此时相对导入就能正常生效:
python -m project.main_code
方案3:添加项目路径到sys.path(更稳妥)
不依赖目录切换,直接把项目根目录添加到Python的搜索路径中,避免目录切换带来的潜在影响:
import sys sys.path.append('absolute path to project folder') from code import s_utils
内容的提问来源于stack exchange,提问作者user1700890
相关产品推荐
相关产品推荐

