执行自定义Python包时触发ModuleNotFoundError报错该如何解决
问题排查与解决方案
核心报错原因
你遇到的ModuleNotFoundError: No module named 'Mod1'是因为__init__.py里的导入写法错误:Python默认会从执行脚本(也就是Packuse.py)所在的目录、以及sys.path注册的路径查找模块,你直接写import Mod1时,Python不会自动去SamplePack包文件夹内查找对应模块,因此找不到文件。
修复步骤
第一步:修正__init__.py的导入逻辑
二选一即可,优先选相对导入:
- 方案1:包内相对导入(无需硬编码包名,迁移更灵活)
from . import Mod1 from . import Mod2
- 方案2:带包名的绝对导入
from SamplePack import Mod1 from SamplePack import Mod2
第二步:修复其他隐藏的代码错误
解决导入问题后,你还会遇到其他运行报错,同步修改即可:
- 函数名不匹配:Mod2中定义的开平方函数是
sqroot,但Packuse.py里调用的是sp.Mod2.sqrt(30),二者需统一,比如将调用改为sp.Mod2.sqroot(30) - input参数错误:Mod1中的
input("Great", x, "What's your phone number? ")写法错误,input仅支持1个提示字符串参数,改为字符串拼接即可,比如:
y = input(f"Great {x}, What's your phone number? ")
- 函数名冲突:Mod2中自定义的
cos函数和你从math导入的cos重名,调用时会触发无限递归报错,建议将自定义函数改名为cosine - 文件名大小写一致:你执行命令是
python packuse.py,但实际文件名为Packuse.py,Windows系统不区分大小写可正常运行,Linux/macOS系统会报错,建议保持文件名和执行命令的大小写统一
内容的提问来源于stack exchange,提问作者parminder kaur
相关产品推荐
相关产品推荐

