Python运行main.py报相对导入错误,如何导入iota.py调用FunI函数
解决Python模块导入报错方案
报错原因
你直接运行main.py作为入口脚本时,Python会将其识别为顶层的__main__模块,不存在对应的父包层级关系,因此无法使用..开头的相对导入语法,才会抛出attempted relative import with no known parent package错误。
修复步骤
- 路径写法修正:Windows路径直接写单反斜杠会触发转义,需要添加原始字符串前缀
r或者用双反斜杠,另外原代码中添加E:\Karya\Python到搜索路径属于多余操作,可以删除。 - 导入语法替换:将相对导入改为绝对导入即可,因为你已经将
E:\Karya加入模块搜索路径,Python可以直接搜索到该目录下的packages包。 - (可选但推荐)在
packages文件夹、packages/extra文件夹下各添加一个空的__init__.py文件,作为Python识别包目录的标识,兼容性更好。
修复后代码
import sys # 用原始字符串前缀避免Windows路径转义问题 sys.path.append(r'E:\Karya') # 替换为绝对导入 from packages.extra import iota print(iota.FunI())
更灵活的动态路径写法
如果不想写死本地绝对路径,避免代码迁移到其他设备后无法运行,可以用动态获取项目根路径的方式:
import sys import os # 动态获取main.py所在目录的上级目录,也就是E:\Karya root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(root_dir) from packages.extra import iota print(iota.FunI())
内容的提问来源于stack exchange,提问作者Kainen Madison Irtanto
相关产品推荐
相关产品推荐

