You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:27:23