首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

Python 中

2019-12-18

在指令行中运用 Python 时,它能够接纳大约 20 个选项,语法格局如下:

python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]

本文想要聊聊比较特别的“-m”选项: 关于它的典型用法、原理解析与开展演化的进程。

首要,让咱们用“--help”来看看它的解说:

-m mod run library module as a script 

mod 是“module”的缩写,即“-m”选项后边的内容是 module,其作用是把模块当成脚原本运转。

“terminates option list”意味着“-m”之后的其它选项不起作用,在这点上它跟“-c”是相同的,都是“终极选项”。官方把它们界说为“接口选项”,需求差异于其它的一般选项或通用选项。

Python 中有许多运用 -m 选项的场景,信任咱们或许会用到或许看见过,我在这里想共享 5 个。

在 Python3 中,只需一行指令就能完成一个简略的 HTTP 服务:

python -m http.server 8000
# 注:在 Python2 中是这样
python -m SimpleHTTPServer 8000

履行后,在本机翻开“ http://localhost:8000 ”,或许在局域网内的其它机器上翻开“ http://本机ip:8000 ”,就能拜访到履行目录下的内容,例如下图便是我本机的内容:

与此相似,咱们只需求一行指令“python -m pydoc -p xxx”,就能生成 HTML 格局的官方协助文档,能够在浏览器中拜访。

上面的指令履行了 pydoc 模块,会在 9000 端口发动一个 http 服务,在浏览器中翻开,我的成果如下:

它的第三个常见用法是履行 pdb 的调试指令“python -m pdb xxx.py”,以调试形式来履行“xxx.py”脚本:

第四个相同挺有用的场景是用 timeit 在指令行中测验一小段代码的运转时刻。以下的 3 段代码,用不同的方法拼接 “0-1-2-……-99” 数字串。能够直观地看出它们的功率差异:

最终,还有一种常常被人疏忽的场景:“python -m pip install xxx”。咱们或许会习气性地运用“pip install xxx”,或许做了版别区分时用“pip3 install xxx”,总归不在前面用“python -m”做指定。但这种写法或许会出问题。

很偶然的是,在本月初,Python 的中心开发者、 第一届辅导委员会 五人成员之一的 Brett Cannon 专门写了一篇博客《 Why you should use python -m pip 》,提出应该运用“python -m pip”的方法,并做了具体的解说。

他的首要观念是:在存在多个 Python 版别的环境中,这种写法能够精确地操控三方库的装置方位。例如用“python3.8 -m pip”,能够清晰指定给 3.8 版别装置,而不会混杂成其它的版别。

看了前面的几种典型用法,你是否开端猎奇: “-m”是怎样运作的?它是怎样完成的?

关于“python -m name”,一句话解说: Python 会检索 sys.path ,查找姓名为“name”的模块或许包,并将其内容当成“__main__”模块来履行。

以“.py”为后缀的文件便是一个模块,在“-m”之后运用时,只需求运用模块名,不需求写出后缀,但条件是该模块名是有用的,且不能是用 C 言语写成的模块。

在“-m”之后,如果是一个无效的模块名,则会报错“No module named xxx”。

如果是一个带后缀的模块,则首要会导入该模块,然后或许报错:Error while finding module specification for 'xxx.py' ),拓宽了解说器查找模块的规模与精度

开发了新的 runpy.run_module 来完成本功用,而不必修正 CPython 解说器,如此可便当移植到其它解说器

至此,-m 选项使得 Python 能够在所有的命名空间内定位到指令行中给定的模块。

2009 年,在 Python 3.1 版别中,只需给定包的称号,就能定位和运转它的“__main__”子模块。2014 年,-m 扩展到支撑命名空间包。

至此,通过十年的开展演化,-m 选项变得功用完全,羽翼丰满。

最终,咱们来个 ending 吧:-m 选项或许看似不起眼,但它肯定是最特别的选项之一,它使得在指令行中,运用内置模块、规范包与三方库时变得更轻松便当。有时机就多用一下吧,领会它带来的愉悦体会。

https://docs.python.org/3.7/using/cmdline.html#cmdoption-m

https://snarky.ca/why-you-should-use-python-m-pip

https://www.python.org/dev/peps/pep-0338/

https://blog.csdn.net/jian3x/article/details/89556592

大众号, 本号连载优质的系列文章,有喵星哲学猫系列、Python进阶系列、好书引荐系列、技能写作、优质英文引荐与翻译等等,欢迎重视哦。

热门文章

随机推荐

推荐文章