在Python 3中,我可以使用命令行中的-m标志将任何目录作为Python包运行,或者在这些目录中运行带有相对导入的Python模块。然而,Python 2中的情况似乎并非如此。
假设我有以下文件结构:
C:mflag
└───pack
hey.py
hey.py的内容是:
from __future__ import print_function
print("Hello!")
为什么这两个命令的行为不同?
C:mflag>python -m pack.hey
Hello!
C:mflag>python2 -m pack.hey
C:Python27python2.exe: No module named pack
这是一个名称空间的包,由PEP 0420引入;特别是:
在进口加工过程中,进口机械将继续像在Python中那样迭代父路径中的每个目录3.2.在寻找名为";foo";,对于父路径中的每个目录:
如果找到/foo/_ init _.py,则导入一个常规包然后返回。
如果不是,则/foo。{py,pyc,so,pyd}已找到,a模块被导入并返回。扩展的确切列表因平台以及是否指定了-O标志。这里的列表是代表
如果不是,则会找到/foo,它是目录,它被记录下来,扫描继续进行下一个父路径中的目录。
否则,将继续扫描父路径中的下一个目录。