python -m是将库中的python模块用作脚本去运行
目录结构如下
package/
__init__.py
mod1.py
package2/
__init__.py
run.py
在package里面有mod1.py文件和package2文件夹里面有run.py文件夹
run.py里面的具体内容如下:
# run.py 内容如下
import sys
from package import mod1
print(sys.path)
在运行python package2/run.py
,直接启动的方式会失败:
Traceback (most recent call last):
File "package2/run.py", line 2, in <module>
from package import mod1
ImportError: No module named package
当需要启动的py文件引用了一个模块。你需要注意:在启动的时候需要考虑sys.path中有没有你import的模块的路径!
这个时候,到底是使用直接启动,还是以模块的启动?目的就是把import的那个模块的路径放到sys.path中。
导入一个叫mod1的模块时,解释器现在当前目录搜索名字为mod1.py的文件,如果没有找到的话,就会在sys.path变量中给出的目录列表中查找,sys.path变量中的初始值来自如下:
- 输入脚本的目录(当前目录)
- Python默认安装路径中搜索
- 实际上,解释器由 sys.path 变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录), PYTHONPATH 和安装目录。这样就允许 Python程序了解如何修改或替换模块搜索目录。