如何解决ImportError: attempted relative import with no known parent package错误
问题原因
你直接执行shoot-a-photo.py时,Python会将该脚本所在的misc/calibration/目录作为顶级模块搜索路径,无法识别到上层的misc包结构,因此相对导入语法..会失效。
可用解决方案
方案1:以模块方式运行脚本(无需修改代码)
不要直接执行.py文件,切换到项目根目录(也就是vision-2021/文件夹),用-m参数以模块形式运行即可:
python -m misc.calibration.shoot-a-photo
这种方式Python会自动识别整个项目的包结构,原有相对导入可以正常生效。
方案2:修改为绝对导入+手动添加根目录到搜索路径
如果希望可以直接运行脚本,修改shoot-a-photo.py的导入部分代码,在导入set_camera之前先把项目根目录加入Python的模块搜索路径:
import sys from pathlib import Path # 三层parent分别对应:当前文件所在目录calibration → 上层目录misc → 上层目录项目根目录 sys.path.append(str(Path(__file__).parent.parent.parent.resolve())) # 改用绝对导入 from misc.functions import set_camera
修改完成后你可以直接在任意位置运行shoot-a-photo.py,导入逻辑都可以正常工作。
方案3:调整项目入口结构
如果这类工具脚本较多,可以在项目根目录下编写统一的入口脚本,或者把工具逻辑封装成可调用的函数,通过根目录的入口触发执行,避免直接运行深层子目录脚本导致的导入问题。
内容的提问来源于stack exchange,提问作者Ege Akman
相关产品推荐
相关产品推荐

