sys.path中注册的路径里查找包虽然包的名字是文件夹的名字,但似乎“python只能从PYTHONPATH中注册的路径里查找”所查找的对象是__init__.py文件!
sys.path也就是PYTHONPATH
∪
\cup
∪os.path.abspath(os.path.dirname(__file__))
语法糖:python3允许缺省
__init__.py文件
__name__通过 pop push 计算相对路径中的包比方说__name__=='A.B.C'
from . import CC → 成功 # 计算过程 pop; push CC; A.B.CC
from ..D import E → 成功 # 计算过程 pop; pop; push D; push E; A.D.E
from ...X import Y → 失败 # 计算过程 pop; pop; pop; 报错!离开了相对路径的根目录!
__name__是怎样确定的???python script.py vs python -m A.B.Cpython C.py → __name__=='__main__' 无法通过 pop push 计算,所以无法import相对路径!
python -m A.B.C → A.B.C 必须名称正确(无异常字符),且存在,且存在于PYTHONPATH,执行时 __name__=='A.B.C' !
sys.path中恰好包含了os.path.abspath(os.path.dirname(__file__))!C中import CC就行、from . import CC就不行!import CC通过绝对路径查找,在sys.path里找得到!from . import CC通过相对路径查找,__name__=='__main__' 无法通过 pop push 计算!