python -m 和 python 直接运行的区别

  • 2019 年 12 月 20 日
  • 筆記

一分钟版本

>>> python xxx.py  # 直接运行  >>> python -m xxx # 相当于import,叫做当做模块来启动

主要区别在于sys.path不同

  • 直接运行会将该脚本所在目录添加至sys.path
  • 当做模块启动则会将当前运行命令的路径添加至sys.path

实际应用

假设我们有如下文件结构

package1/      |--__init__.py      |--mod1.py  package2/      |--__init__.py      |--run.py

run.py中import了mod1.py

# run.py  from package1 import mod1

>>> python run.py # 失败,提示找不到package1    # 切换到package2 所在目录  >>> python -m package2.run # 成功