Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “这对”意味着什么;以脚本形式运行库模块";用",-m";选项_Python_Python 3.x - Fatal编程技术网

Python “这对”意味着什么;以脚本形式运行库模块";用",-m";选项

Python “这对”意味着什么;以脚本形式运行库模块";用",-m";选项,python,python-3.x,Python,Python 3.x,我不熟悉Python(也不熟悉编程),尽管有很好的文档记录,但我无法理解-m指令的确切含义(正是在创建虚拟环境时:python3-m venv my_env) 从文档中可以看出,它代表“以脚本形式运行库模块”:事实上,我无法理解这个概念,以及在没有-m的情况下运行命令的区别 此外,这是python3的一个特征吗?这不是python3的属性。在模块化脚本的情况下,您需要使用-m。例如,您有这样的文件夹结构 |-HelloModule |_ __init__.py |_ hellomodul

我不熟悉Python(也不熟悉编程),尽管有很好的文档记录,但我无法理解-m指令的确切含义(正是在创建虚拟环境时:
python3-m venv my_env

从文档中可以看出,它代表“以脚本形式运行库模块”:事实上,我无法理解这个概念,以及在没有
-m
的情况下运行命令的区别


此外,这是python3的一个特征吗?

这不是python3的属性。在模块化脚本的情况下,您需要使用-m。例如,您有这样的文件夹结构

|-HelloModule
  |_ __init__.py
  |_ hellomodule.py
|_ first_script.py
现在,如果要将first_script.py的任何类、函数或任何对象使用到hellomodule.py中,则必须将hellomodule.py作为模块运行,这意味着命令将更改为

python-m HelloModule/HelloModule


您必须从HelloModule目录外部运行此命令。

Python模块只是位于Python可以找到它们的地方的脚本文件。与所有脚本一样,如果您知道它们在哪里,您可以直接运行它们,例如
Python/path/to/module.py

正确设计的模块通常只做设置工作(例如,可以导入的函数和类型),但它们通常不会产生任何可见的副作用。这就是为什么您可以执行导入系统的操作,但什么都不会发生

但是,某些模块在从命令行运行时可能会提供有用的内容。例如
venv
,但也包括
http.server
idlelib
:所有这些都是常规模块,可以从其他模块导入,而不会产生副作用

但是,当直接执行时,它们都会做一些事情(例如,
venv
设置虚拟环境,
http.server
运行简单的http服务器,并且
idleib
空闲运行)。通常通过以下检查来完成:

if __name__ == '__main__':
    print('Module is being executed directly, so do stuff here')
这是一种特殊的方法,可以识别脚本/模块是否正在直接执行,或者是否只是从其他模块导入。您可以了解有关该问题的更多信息

因此,您可以直接使用前面建立的
python/path/to/module.py
运行模块。但这需要您知道模块的完整路径。这就是
-m
选项发挥作用的地方:对于通常仅使用
导入modulename
即可导入的模块,您可以使用
python-m modulename
直接运行该模块。就像键入了该模块的完整路径一样


因此,对于上面的示例,我们可以使用
python-m venv
python-m http.server
。或者
python-m idlelib

文档是您的朋友:您已经阅读了?只是问一下,因为您说它有很好的文档,但没有链接到“文档”另一个很酷的示例是
json.tool
用于从shell进行漂亮的打印。
echo'{“1”:“a”,“2”:“b”}“| python-m json.tool
对于我来说,如果我们接受-m标志所做的唯一事情就是上面的答案中指定的,那么这看起来有点错误。导入函数与脚本无关,就好像它是从根目录运行一样。