Python绝对导入与相对导入问题:目录结构下导入报错解析
Python模块导入问题解答
目录结构回顾
Assignments ├── Assignment1 │ ├── Assignment-1.pdf │ └── assignment1.py └── Methods ├── __init__.py └── primality.py
绝对导入语句
绝对导入以项目根目录(即Assignments)为起点,需要确保该目录在Python的搜索路径中。
直接使用以下语句导入目标函数:
from Methods.primality import func # 将func替换为你实际要导入的函数名
如果直接运行assignment1.py时提示找不到Methods模块,可在脚本开头添加以下代码,手动把项目根目录加入搜索路径:
import sys import os # 获取当前脚本的父目录的父目录(即Assignments目录) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
相对导入语句
相对导入基于当前脚本所在的模块位置,正确语句为:
from ..Methods.primality import func
注意:相对导入不能在直接运行脚本时生效,必须把脚本当作包的一部分来运行。
报错原因及解决
你直接运行assignment1.py时,Python会将其视为独立的顶级脚本,而非某个包的子模块,此时不存在所谓的“父包”,因此触发ImportError: attempted relative import with no known parent package错误。
解决方法:从Assignments目录的父目录下,用模块方式运行脚本,命令如下:
python -m Assignments.Assignment1.assignment1
这样Python会把整个Assignments当作一个包,相对导入就能正常工作了。
内容的提问来源于stack exchange,提问作者Purvesh Patel
相关产品推荐
相关产品推荐

