Python同级目录导入模块报attempted relative import beyond top-level package错误如何解决
报错原因
你直接右键运行单文件脚本时,Python会将当前运行脚本所在的目录xxxx/src/FiveInch/800x480/识别为顶级包目录,不会向上识别更高层级的包结构。XMLHelper.py中的from ..Common import BaseScreen是尝试访问800x480目录的上级目录中的Common包,自然超出了当前识别的顶级包范围,触发报错。
解决方案
- 方案1(推荐,适配PyCharm开发场景)
- 右键项目根目录下的
src文件夹,选择Mark Directory as → Sources Root,让PyCharm将src目录加入Python导入搜索路径 - 打开
ResultSettingScreen.py的运行配置,将运行模式从脚本路径改为模块名称,填入完整模块路径FiveInch.800x480.ResultSettingScreen后重新运行即可。
- 右键项目根目录下的
- 方案2(兼容直接运行脚本的场景)
在ResultSettingScreen.py文件的最开头加入以下代码,手动将上级目录加入Python搜索路径:
同时将import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))XMLHelper.py中的相对导入改为绝对导入:from Common import BaseScreen - 方案3(包发布场景)
如果你的项目是作为第三方包开发使用,不要在子模块中编写直接运行的入口逻辑,统一在项目根目录编写入口脚本,所有导入统一使用绝对路径即可。
内容的提问来源于stack exchange,提问作者BizBaker
相关产品推荐
相关产品推荐

