Python 2和Python 3的-m标志有何不同



在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,它是目录,它被记录下来,扫描继续进行下一个父路径中的目录。

  • 否则,将继续扫描父路径中的下一个目录。

最新更新