You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3导入含__init__.py的包时遇ModuleNotFoundError,Python 2正常

嘿,这个问题其实是Python 2和Python 3在模块导入机制上的一个关键差异导致的,我来给你拆解清楚:

问题根源

Python 2 和 Python 3 对包内模块的导入规则有明显区别:

  • 在 Python 2 中,允许隐式相对导入:当你在package/__init__.py里写from modu import value时,解释器会优先在当前包(package目录)下查找modu.py,所以能成功导入变量。
  • 在 Python 3 中,默认启用绝对导入:此时from modu import value会直接去系统路径(sys.path)的顶级目录里找modu模块,而你的modu.py是嵌套在package目录下的,不在顶级路径中,自然就抛出ModuleNotFoundError了。

解决方法

这里有几种靠谱的修复方式,都能兼容Python 2和3:

方法1:使用显式相对导入(推荐)

修改package/__init__.py的内容为:

from .modu import value

这里的.代表当前包目录,属于显式的相对导入,Python 3 完全支持,同时也能被 Python 2 识别。

方法2:使用绝对导入

基于包的完整路径来导入,修改package/__init__.py为:

from package.modu import value

这种写法会直接从顶级包package开始查找模块,只要project目录在sys.path中(你在project下运行test.py时会自动加入),就能正常导入。

方法3:不推荐的临时方案(修改sys.path)

如果你实在不想改导入语句,可以在__init__.py开头手动把当前包目录加入sys.path,但这种方式容易引发路径冲突,不建议长期使用:

import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from modu import value

改完之后,再运行test.py,不管是Python 2还是3都能正常输出99啦。

内容的提问来源于stack exchange,提问作者Khanh Do

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:10:03