繁体   English   中英

“ python a / b.py”和“ python -m ab”之间的区别

[英]Difference between “python a/b.py” and “python -m a.b”

当我运行python a/b.py ,我得到:

Traceback (most recent call last):
  File "a/b.py", line 10, in <module>
    from . import config
ImportError: cannot import name 'config'

当我运行python -m ab ,没有任何错误。

两种方法之间的根本区别是什么?

根本的区别是运行命令时,哪个文件夹将添加到模块搜索路径中 在第一种情况下,它是文件夹a 在第二种情况下,它的文件夹a

您可以通过创建一个文件夹,证明机制为自己a在控制台的工作目录和里面a脚本b.py包含以下代码:

import sys
print(sys.path)

该脚本只是将Python的模块搜索路径作为目录列表打印出来。

如果你运行python a/b.py从包含目录a ,在第一项sys.path名单将(绝对路径) a 这是因为您已明确指示Python运行该特定脚本b.py ,而该脚本恰好位于该目录中。 因此,该目录a会首先添加到搜索路径中。

如果您运行python -m ab ,它会打印出(绝对路径) a的父文件夹首先在列表中,即控制台的工作目录。 这是因为在这种情况下,您不会运行特定的脚本。 相反,你告诉Python查找一个名为模块b在名为包a 在这种情况下,它首先在工作目录中查找此类软件包(然后在此处找到),然后在(默认)搜索路径中的其他位置查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM