Python通过__init__.py导出自定义模块时的相对导入错误解决咨询
Python通过__init__.py导出自定义模块时的相对导入错误解决咨询
看起来你在尝试通过__init__.py导出old_div函数时,被相对导入的路径问题卡住了,我来帮你理清楚怎么解决这个问题~
首先先定位错误核心:你写的相对导入路径完全错了!咱们先确认下你的目录结构应该是这样的对吧?
Blackhole/ server/ utils/ __init__.py math.py # 包含old_div函数的文件
你在server/utils/__init__.py里写的from ..utils.math import old_div,其中..代表当前utils目录的上一级(也就是server目录),再加上utils.math的话,相当于让Python去找server/utils/utils/math.py——这显然是不存在的路径,Python也会因为无法识别对应的父包结构,抛出那个相对导入的错误。
正确的导入写法
在server/utils/__init__.py里,只需要用当前目录的相对导入就够了,改成下面这样:
from .math import old_div
这里的.就代表当前的utils包目录,刚好math.py就在这个目录里,完全匹配你的需求。
其他目录如何导入这个函数
- 如果是在
server目录下的其他文件(比如server/main.py)里导入,直接写:from utils import old_div - 如果是在更外层的目录(比如
Blackhole目录下的文件)导入,用绝对导入会更稳妥:from server.utils import old_div
额外注意点
- 别直接运行
__init__.py文件!如果你直接用python server/utils/__init__.py执行这个文件,Python不会把它当成包的一部分,相对导入必然失效,你应该运行上层的业务脚本。 - 这个问题和虚拟环境没什么关系,主要是导入路径的逻辑没搞对,虚拟环境激活状态不影响错误的修复。
备注:内容来源于stack exchange,提问作者Jonathan Clark Pittman
相关产品推荐
相关产品推荐

