Python包内部模块导入引发ModuleNotFoundError问题咨询
Python包内部模块导入引发ModuleNotFoundError问题咨询
你遇到的确实是包内模块相对导入的典型问题,我来给你拆解原因和解决办法:
问题根源
当你直接运行derivative_functions.py时,Python会自动把当前文件所在的pippo目录加入到模块搜索路径sys.path里,所以能轻松找到同目录的functions_pippo.py。但当你从外层的main.py导入pippo.derivative_functions时,Python是把provapackage目录加入到sys.path的,这时候derivative_functions.py里用from functions_pippo import add这种绝对导入方式,Python会去sys.path的顶层目录找functions_pippo模块,自然找不到它——毕竟它藏在pippo子目录里。
两种可行解决方案
你可以根据自己的习惯选择其中一种:
方案一:使用相对导入
修改derivative_functions.py里的导入语句,用相对路径指向同目录的模块:
from .functions_pippo import add
这里的.代表当前模块所在的包目录(也就是pippo),这样Python就能精准定位到同目录的functions_pippo模块了。
方案二:基于包名的绝对导入
如果你更偏好绝对导入的写法,也可以直接以包名为前缀来导入:
from pippo.functions_pippo import add
这种方式要求provapackage所在目录在sys.path中(运行main.py时,Python会自动识别当前工作目录下的包结构),所以也能正常找到目标模块。
额外注意事项
- 不要直接运行使用了相对导入的模块文件(比如直接跑
derivative_functions.py),这时候Python会把它当作顶层脚本,相对导入会触发报错。如果要测试这个模块,建议用python -m pippo.derivative_functions这种模块运行方式,或者在main.py里写测试代码。 - 确保
pippo目录下的__init__.py存在(你已经满足这个条件),它是Python识别该目录为合法包的必要标志。
试试上面的方法,应该就能解决这个ModuleNotFoundError了~
备注:内容来源于stack exchange,提问作者GiusWestsideDS
相关产品推荐
相关产品推荐

