Python同目录模块导入报错:attempted relative import with no known parent package
解决Python同一目录下导入模块的相对导入错误
问题原因
直接运行main.py时,Python会将当前文件所在目录视为顶级模块目录,而非可识别的包结构。这时候authentication.py里的from .models import User这类相对导入语法就会失效——相对导入要求文件作为包的一部分被加载,而非直接执行脚本。
解决方案
方案1:将目录转为可导入的包
- 在
e_commerce_api目录下创建空的__init__.py文件,让Python识别该目录为一个包。 - 从上级目录(即
/Users/user/PycharmProjects/)运行脚本,执行命令:
这种方式下,python -m e_commerce_api.mainmain.py里的from authentication import *和authentication.py里的from .models import User都无需修改,即可正常工作。
方案2:改用绝对导入
直接修改authentication.py中的导入语句,把相对导入替换为绝对导入:
# 将 authentication.py 里的 from .models import User # 修改为 from models import User
修改后直接运行main.py即可,适合小型项目快速解决问题。
方案3:在PyCharm中配置Sources Root
- 右键点击
e_commerce_api目录,选择Mark Directory as -> Sources Root。 - 配置完成后,PyCharm会自动将该目录加入Python模块搜索路径,不管是相对导入还是绝对导入,直接运行
main.py都能正常工作。
内容的提问来源于stack exchange,提问作者Geo48
相关产品推荐
相关产品推荐

