Python从父目录导入模块遇ImportError: No module named test的解决方法
解决ImportError并正确导入parent.py到child.py
根据你的目录结构和已设置的PYTHONPATH,问题出在导入语句的层级处理上。先明确你的目录结构:
/mfolder/ └── A/ ├── parent.py └── test/ ├── __init__.py └── child.py
PYTHONPATH已经指向/mfolder,这意味着Python会将/mfolder视为模块搜索的顶级路径,A是一个顶级包,test是A的子包。
下面是两种可行的解决方法:
方法1:使用绝对导入(推荐,兼容性更好)
在child.py中直接从顶级包A导入parent:
from A import parent
这样Python会从PYTHONPATH的/mfolder下找到A包,进而导入其中的parent.py模块,完全符合你的路径设置。
方法2:使用相对导入(适用于包内部模块间的引用)
如果希望基于当前模块的位置来引用上级目录的parent.py,可以使用相对导入语法:
from .. import parent
这里的..表示当前模块(child.py)所在目录的上一级目录(也就是A目录)。不过要注意:
- 这种方式只能在包内部使用,如果你直接运行
child.py(比如python /mfolder/A/test/child.py),Python会将它视为顶级脚本,相对导入会报错。 - 正确的运行方式是从
/mfolder目录执行:python -m A.test.child,这样child.py会作为A.test包的一部分被加载,相对导入就能正常工作。
额外注意事项
- 建议在
A目录下也创建一个空的__init__.py文件,虽然Python 3.3+支持无__init__.py的命名空间包,但添加后能确保A被识别为标准的Python包,避免一些潜在的导入问题。 - 检查你之前的导入语句,错误提示
No module named test大概率是因为你尝试了错误的导入层级(比如误写了import test或者错误的包路径),替换成上面两种方式即可解决。
内容的提问来源于stack exchange,提问作者Kaushal Kumar
相关产品推荐
相关产品推荐

