Python 命令行的 -m 参数

1. 命令格式

python -m <module-name>

2. 参数解释

sys.path 中搜索指定模块, 并以 __main__ 模块执行其内容.

该参数是 模块名(注一), 不能输入文件扩展名(.py). 模块名应该是有效的绝对的 Python 模块名, 但是 Python 不对此作强制要求(例如, 允许使用含连字符 - 的名称).

包名称(包括命名空间包(注二))也允许使用. 使用包名称而不是普通模块名时, 解释器把 <pkg>.__main__ 作为主模块执行.

3. 使用范例

创建一个名为 my_env 的 Python 虚拟环境

python -m venv my_env

使用 pip 安装 Django

python -m pip install django

如果我们已经将 pip 添加到系统环境变量中去的话, 是可以直接使用 pip 命令的, 上面这个命令可以在系统中有多种版本的 Python 时给我们提供便利.

4. 补充

关于 sys.path 的说明.

所谓 sys.path, 其实就是一个指明模块搜索路径的字符串列表(list). 详细内容可以参考文档 https://docs.python.org/3/library/sys.html#sys.path.

我们可以通过一个 Python 程序(我这里程序名为 draft04.py)来看一下这个 sys.path 是什么

import sys

for each in sys.path:
    print(each)

print(len(sys.path))

然后在命令行执行

py draft04.py

得到结果

我们可以看到, 这里输出了很多文件路径, 这些路径下就有很多 Python 的包, 我们上面执行的 python -m <module-name>, 这里的的参数 <module-name> 就是从这些路径中搜寻而得, 比如, python -m pip install django 中的 pip, 就是从 C:\Users\17309\AppData\Local\Programs\Python\Python38\lib\site-packages 路径中搜寻而得,

再比如, python -m venv my_env 命令中的 venv 命令是从 C:\Users\17309\AppData\Local\Programs\Python\Python38\lib 中搜寻而得,

5. 参考

https://docs.python.org/3/using/cmdline.html


注一: 所谓模块名, 就是我们平时写的带 .py 文件扩展名的 Python 脚本文件, 把 .py 去掉就是模块名.

注二: 命名空间包, 就是包内不含有 __init__.py 的包.


Python 命令行的 -m 参数
http://fanyfull.github.io/2021/05/27/Python-命令行的-m-参数/
作者
Fany Full
发布于
2021年5月27日
许可协议