Python相对模块导入报错:ImportError: attempted relative import with no known parent package
问题排查与解决方案
报错原因
你用相对导入from . import y时,Python需要把first识别为一个包,但如果直接在first目录下运行python x.py,Python会把x.py当成独立的顶层脚本,而非某个包的子模块,自然找不到所谓的“父包”,所以抛出ImportError。
解决方法
方法1:以包的形式运行脚本
- 在
first目录下创建空的__init__.py文件(Python 3.3+支持无此文件的命名空间包,但显式创建能更明确标识这是一个包) - 切换到
root目录,执行以下命令运行脚本:python -m first.x-m参数会让Python把first当作包处理,相对导入就能正常识别y模块。
方法2:改用绝对导入
如果不想以包的方式运行,修改x.py的导入语句为:
# x.py import y
然后直接在first目录下运行python x.py即可。这种方式是把first目录加入Python搜索路径,将y.py当作顶层模块导入,适合简单场景。
方法3:手动添加路径到sys.path(仅临时测试用)
在x.py开头添加以下代码,把root目录加入Python的模块搜索路径:
# x.py import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent)) from first import y
这种方式不够规范,容易引发路径问题,不推荐长期使用。
内容的提问来源于stack exchange,提问作者net
相关产品推荐
相关产品推荐

