Python跨目录导入模块报No module named 'python_ins'如何解决
导入失败的核心原因
__init__.py 仅用于将对应目录标记为Python可识别的包,不会自动修改Python的模块搜索逻辑,报错本质是模块搜索路径和你的包结构不匹配:
- 你进入
folder2目录直接执行python main.py时,Python会默认把「当前运行脚本所在的目录」,也就是/Users/my.name/temp/python_ins/folder2/加入模块搜索路径列表sys.path - 你写的导入语句
from python_ins.folder1 import module需要Python定位到顶层包python_ins,但这个包实际存放在/Users/my.name/temp/路径下,该路径根本不在当前的sys.path搜索范围内,自然会抛出找不到模块的错误。
无需修改代码、无需手动改sys.path的解决方法
直接退到python_ins文件夹的父级目录(也就是/Users/my.name/temp/),用模块模式运行脚本即可,不要进入folder2直接执行py文件:
cd /Users/my.name/temp python -m python_ins.folder2.main
这种运行方式下,Python会自动把你执行命令时所在的temp目录加入搜索路径,刚好能找到python_ins顶层包,导入逻辑可以正常生效。
常见误区:很多人以为只要目录里放了
__init__.py,Python就会自动向上递归识别所有层级的包,实际上__init__.py只是包的身份标记,Python只会在sys.path已列出的目录里查找对应名称的包/模块,不在搜索路径里的内容,就算目录结构完全合规也识别不到。
内容的提问来源于stack exchange,提问作者fjjones88
相关产品推荐
相关产品推荐

