已添加__init__.py仍出现Python相对导入错误该如何修复?
问题原因
Python的相对导入仅在文件作为包的一部分被导入时生效,如果你直接执行plugins/test_plugin/test_plugin.py脚本,Python会将该脚本所在的test_plugin目录作为顶级执行目录,无法识别上层的包结构,因此会抛出找不到父包的错误。
你写的导入路径本身没有语法错误:plugins/test_plugin/test_plugin.py向上跳转层级逻辑正确:
- 1个点(
.):当前test_plugin目录 - 2个点(
..):上层plugins目录 - 3个点(
...):项目根目录
目标analyx.plugins正好在项目根目录下,问题出在运行或包配置环节。
可行解决方案
方案1:调整运行命令
不要直接执行脚本文件,改为在项目根目录下以模块方式运行:
python -m plugins.test_plugin.test_plugin
该方式会自动将当前工作目录(项目根目录)加入Python的模块搜索路径,可正常识别整个包结构。
方案2:使用绝对导入 + 可编辑安装(推荐)
你项目根目录已经有setup.py,直接在根目录下执行可编辑安装:
pip install -e .
安装完成后,整个项目的包会被注册到当前Python环境中,你可以直接把导入语句改成更不容易出错的绝对导入,不需要数相对层级:
from analyx.plugins import Plugin
后续不管在什么位置调用相关模块,都不会出现导入错误。
方案3:临时添加搜索路径
如果不想安装包,可以在test_plugin.py的最开头手动把项目根目录加到模块搜索路径:
import sys from pathlib import Path # 向上跳3级找到项目根目录,可根据你的实际路径调整 sys.path.append(str(Path(__file__).parent.parent.parent.resolve())) # 之后就可以直接用绝对导入 from analyx.plugins import Plugin
内容的提问来源于stack exchange,提问作者Anuran Roy
相关产品推荐
相关产品推荐

