我是Python新手(也是编程新手),尽管有详细的文档记录,但我无法理解 -m 指令的确切含义(确切地说是在创建虚拟环境时:python3 -m venv my_env
.
据我从文档中可以读到,它代表“将库模块作为脚本运行”:实际上我无法弄清楚这个概念,以及在没有-m
.
而且,这是Python 3的一个特性吗?
Python 模块只是位于 Python 可以找到的位置的脚本文件。与所有脚本一样,如果您知道它们在哪里,则可以直接运行它们,例如python /path/to/module.py
.
正确设计的模块通常除了设置东西(例如可以导入的函数和类型)之外什么也不做,但它们通常不会有任何明显的副作用。这就是为什么你可以这样做import sys
但什么也没发生。
但是,某些模块在从命令行运行时可能会提供有用的东西。例子包括venv
但是也http.server
or idlelib
:所有这些都是常规模块,可以从其他模块导入而不会产生副作用。
但是当直接执行时,它们都会做一些事情(例如venv
设置虚拟环境,http.server
运行一个简单的 HTTP 服务器,并且idlelib
运行空闲)。这通常通过以下检查来完成:
if __name__ == '__main__':
print('Module is being executed directly, so do stuff here')
这是一种识别脚本/模块正在直接执行,或者是否只是从其他模块导入的特殊方法。您可以详细了解该问题“什么是if __name__ == '__main__': do?” https://stackoverflow.com/q/419163/216074.
因此,您可以直接使用运行模块python /path/to/module.py
正如我们之前所建立的。但这需要您知道模块的完整路径。这就是-m
选项发挥作用:对于通常可以仅使用导入的模块import modulename
, 您可以使用python -m modulename
直接运行该模块。就像您输入了它的完整路径一样。
所以对于上面的例子,我们可以使用python -m venv
, python -m http.server
. or python -m idlelib
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)