Python包内相对导入问题:如何通过__init__.py解决模块找不到错误
解决Python包相对导入问题的方法
问题根源
从包外部(比如根目录的main.py)导入main_package时,Python会将main_package视为顶层模块。此时func.py里的from sub_package.aa import aaf1会被当作绝对导入,但sub_package并非顶层模块,因此触发找不到模块的错误。
具体解决方案
1. 改用正确的相对导入语法
直接修改main_package/func.py中的导入语句,使用相对路径标识:
from .sub_package.aa import aaf1
这里的.代表当前模块所在的包目录,Python会自动识别同包下的sub_package子模块。
2. 规范包结构
确保sub_package目录下存在__init__.py文件(空文件即可),让Python将其识别为合法子包。无需修改main_package/__init__.py,除非你需要对外暴露子包内容,但这对解决当前导入问题不是必需操作。
3. 包模式运行模块(可选)
如果需要单独测试func.py,不要直接执行python main_package/func.py,而是以包模块的方式运行:
python -m main_package.func
这种方式会让Python将当前目录作为包的根路径,正确解析相对导入逻辑。
内容的提问来源于stack exchange,提问作者Evan Kim
相关产品推荐
相关产品推荐

