python中假设有模块m_理解python的-m参数

python的-m参数,作用是将模块当做脚本来运行。这句话啥意思?

脚本中的import命令,用来引入模块,引入模块的过程,也会执行模块文件暴露在外的代码。不过,在 if __name__ == '__main__': 下的代码,不会被执行,因为import时的 __name__不等于__main__,而是当前的模块名称。

哪什么时候 __name__ 等于 __main__ 呢?直接运行某个.py文件的时候!

要把python的标准库中的模块,当成脚本来运行,其实就是运行模块文件中的包含在 if __name == '__main__': 下的代码,有些是测试代码,有些是功能代码。

而python标准库的代码文件,一定是与你的项目文件在不同的路径下。我们在命令行下运行一个.py文件,需要指定这个.py文件的路径,python默认只会在当前路径下查找这个.py文件。这就是-m参数出场的时候了,在命令行加上-m参数,可以使python在查找路径的时候,除了当前路径,还去查找标准库的路径。这样就可以直接在__main__命名空间下,运行标准库中的.py文件,也就是标准模块的脚本文件。

一般情况,我们只是import标准库,加上-m参数就可以直接运行标准库。这里要理解,标准库路径,同样也包含了各种通过pip install安装的第三方库,这些库有许多都是可以直接运行的。因此,-m参数的作用还是很大的,给了第三方库一个直接运行的机会。

比如python标准库中的http.server模块(在http这个package下面),如果没有-m参数,python会提示找不到,加上-m参数,就能够正常启动:

$ python3 http.server

python3: can't open file 'http.server': [Errno 2] No such file or directory

$ python3 -m http.server

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

我们再用-m参数直接运行一下tkinter模块,它提供了一点测试代码:

$ python3 -m tkinter

然后你会看到tkinter模块的测试代码运行效果:

tkinter模块的测试代码

看到这个窗口,你就可以肯定tkinter模块安装无误!

所以,-m参数只是增加了python的搜索路径,除了当前路径,再加上了标准库的路径,也就可以直接运行第三方库了。同时,注意一个细节,命令行不再需要.py了,直接写模块名称,有.py时反而会出错。

$ python3 -m test

.......

----------------------------------------------------------------------

Ran 7 tests in 0.001s

OK

$ python3 -m test.py

/usr/bin/python3: Error while finding module specification for 'test.py' (ModuleNotFoundError: __path__ attribute not found on 'test' while trying to find 'test.py')

test.py文件在当前路径下,使用-m参数一样可以执行这个文件中的测试代码,但不能写.py。

python命令行的-m参数并不神秘,就是把模块当成脚本来运行,在命令行可以直接运行标准库和pip install安装的第三方模块代码。

-- EOF --

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值