我是 Python 新手(也是编程新手),虽然有据可查,但我无法理解 -m 指令的确切含义(确切地说是在创建虚拟环境时:python3 -m venv my_env
。
据我从文档中可以看出,它代表“将库模块作为脚本运行”:实际上我无法弄清楚这个概念以及在没有 的情况下运行命令有什么区别-m
.
而且,这是 Python 3 的特性吗?
最佳答案
Python 模块只是位于 Python 可以找到它们的位置的脚本文件。与所有脚本一样,如果您知道它们在哪里,则可以直接运行它们,例如python/path/to/module.py
.
正确设计的模块通常除了设置一些东西(例如你可以导入的函数和类型)之外什么都不做,但它们通常不会有任何可见的副作用。这就是为什么您可以执行 import sys
却什么也没有发生的原因。
但是,某些模块在从命令行运行时可能会提供有用的东西。示例包括 venv
以及 http.server
或 idlelib
:所有这些都是可以从其他模块导入而没有副作用的常规模块.
但是当直接执行时,它们都做事(例如venv
建立一个虚拟环境,http.server
运行一个简单的HTTP服务器,idlelib
运行空闲)。这通常通过以下检查来完成:
if __name__ == '__main__':
print('Module is being executed directly, so do stuff here')
这是一种识别脚本/模块正在直接执行的特殊方式,或者它是否只是从其他模块导入的。您可以了解更多关于问题 “What does if __name__ == '__main__':
do?” .
因此,您可以像我们之前建立的那样直接使用 python/path/to/module.py
运行模块。但这需要您知道模块的完整路径。这就是 -m
选项发挥作用的地方:对于通常可以仅使用 import modulename
导入的模块,您可以使用 python -m modulename
直接运行该模块。就像您输入了它的完整路径一样。
所以对于我们上面的例子,我们可以只使用 python -m venv
, python -m http.server
。或 python -m idlelib
.
关于python - 使用 "run library module as a script"选项对 "-m"意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319694/