PyCharm环境Python相对导入无已知父包ImportError解决方案
PyCharm环境下Python相对导入报错修复方案
报错核心原因
直接运行单入口脚本时,Python默认将脚本所在目录识别为顶层模块路径,脚本内使用.开头的相对导入时,无法找到对应的父包上下文,就会抛出ImportError: attempted relative import with no known parent package异常。
适配调整后目录结构的修复步骤
方案完全匹配你调整后的目录结构:
project_folder ├── testpack # 已创建的Python包 │ ├── __init__.py │ └── testclass.py ├── __init__.py └── __test__.py
1. 配置PyCharm源码根目录
- 打开PyCharm设置,进入
Project Structure配置页 - 选中最外层
project_folder目录,将其标记为Sources Root,保存配置。该操作会让Python解释器默认把项目根目录加入模块搜索路径,识别根目录下的所有自定义包。
2. 修正入口文件代码
打开根目录下的__test__.py,做两处修改:
- 替换错误的相对导入语句为匹配当前包结构的绝对导入
- 修正原代码中错误的入口判断、重复调用异步函数、异步方法未加await的逻辑bug
修正后的完整代码如下:
import asyncio import sys from testpack.testclass import Scheduler async def main(): print("main") scheduler = Scheduler() await scheduler.run() if __name__ == "__main__": try: sys.exit(asyncio.run(main())) except: print("application exception")
testclass.py内容无需修改,保持原有代码即可:
class Scheduler: def __init__(self): print("init") async def run(self): print("run")
验证运行
直接在PyCharm中右键运行__test__.py即可正常执行,预期输出顺序为:
main init run
可选补充:如果需要保留相对导入写法
如果不想用绝对导入,需要调整运行方式:不要直接以脚本模式运行__test__.py,在PyCharm运行配置中选择Run as module,模块名填写对应包路径即可。但日常开发中更推荐使用绝对导入,路径可读性更强,跨目录迁移时也更容易排查问题。
内容的提问来源于stack exchange,提问作者Satscreate
相关产品推荐
相关产品推荐

