Python跨文件夹导入模块报相对导入ImportError错误如何解决?
Python项目跨目录导入报错解决
核心问题
- 你直接执行
python var_class.py时,Python会将当前运行的文件作为独立顶层脚本处理,不会将它所在的tests文件夹识别为Python包,因此相对导入语法.context无法生效,这就是报错attempted relative import with no known parent package的根本原因。 - 你报错信息中出现的
import pierre属于代码笔误,你的context.py中实际导出的是project模块,需要先修正这个拼写问题。
可行解决方案
方法1:修改为绝对导入
直接修改var_class.py的导入逻辑,去掉相对导入语法即可:
# var_class.py from context import project x = project.main.Var()
context.py已经将项目根目录加入了系统路径,直接导入context就可以正常加载project模块。
方法2:以模块方式运行脚本
不修改现有导入代码的前提下,切换到外层项目根目录(存放.gitignore、README.md的那个project目录),执行以下命令:
python -m tests.var_class
使用-m参数运行时,Python会自动将当前目录加入模块搜索路径,同时将tests文件夹识别为合法包,相对导入即可正常生效。
方法3:直接用测试框架运行
如果你的var_class.py是测试用例,直接在项目根目录运行pytest即可,测试框架会自动处理路径和导入逻辑,不需要手动调整代码。
可选优化
你可以在内层project文件夹的__init__.py中添加以下内容,简化后续导入逻辑:
# project/project/__init__.py from .main import Var
配置完成后就可以直接用x = project.Var()调用类,不需要再写project.main.Var。
内容的提问来源于stack exchange,提问作者Matteo Brini
相关产品推荐
相关产品推荐

