Python -m参数原理及使用方法解析


Posted in Python onAugust 21, 2020

python -m xxx.py

作用是:把xxx.py文件当做模块启动

但是我一直不明白当做模块启动到底有什么用。python xxx.py和python -m xxx.py有什么区别!

自问自答:

python xxx.py
python -m xxx.py

这是两种加载py文件的方式:

1叫做直接运行

2把模块当作脚本来启动(注意:但是__name__的值为'main' )

不同的加载py文件的方式,主要是影响——sys.path 这个属性。sys.path 就相当于liunx中的PATH。
下面来看一下sys.path

>>> import sys
>>> sys.path
['', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
...]

上面的内容我只截取了一段。此为当前python解释器运行的环境,python解释器会在这些目录下去寻找依赖的库!
注解一点:‘'——为当前目录

下面有两个例子,通过不同方式启动同一文件,sys.path属性的值有何不同。

# run.py 内容如下
import sys
print(sys.path)


# 直接启动:python run.py
test_import_project git:(master) ✗ python run.py
['/Users/sx/Documents/note/test_py/test_import_project', 
 '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
 ...]
# 以模块方式启动:python -m run.py
test_import_project git:(master) ✗ python -m run.py
['', 
 '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',

*** 细心的同学会发现,区别就是在第一行。

直接启动是把run.py文件,所在的目录放到了sys.path属性中。

模块启动是把你输入命令的目录(也就是当前路径),放到了sys.path属性中***

在工作场景中有什么用呢?

# 目录结构如下
package/
	__init__.py
	mod1.py
package2/
	__init__.py
	run.py
# run.py 内容如下
import sys
from package import mod1
print(sys.path)

如何才能启动run.py文件?

# 直接启动(失败)
➜ test_import_project git:(master) ✗ python package2/run.py
Traceback (most recent call last):
 File "package2/run.py", line 2, in <module>
  from package import mod1
ImportError: No module named package

# 以模块方式启动(成功)
➜ test_import_project git:(master) ✗ python -m package2.run
['',
'/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
...]

当需要启动的py文件引用了一个模块。你需要注意:在启动的时候需要考虑sys.path中有没有你import的模块的路径!
这个时候,到底是使用直接启动,还是以模块的启动?目的就是把import的那个模块的路径放到sys.path中。你是不是明白了呢?

官方文档参考:  http://www.pythondoc.com/pythontutorial3/modules.html

导入一个叫 mod1 的模块时,解释器先在当前目录中搜索名为 mod1.py 的文件。如果没有找到的话,接着会到 sys.path 变量中给出的目录列表中查找。 sys.path 变量的初始值来自如下:

  • 输入脚本的目录(当前目录)。
  • 环境变量 PYTHONPATH 表示的目录列表中搜索(这和 shell 变量 PATH 具有一样的语法,即一系列目录名的列表)。
  • Python 默认安装路径中搜索。
  • 实际上,解释器由 sys.path 变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录), PYTHONPATH 和安装目录。这样就允许 Python程序了解如何修改或替换模块搜索目录。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的简单文本类游戏实例
Apr 28 Python
Python编程之属性和方法实例详解
May 19 Python
python图像处理之镜像实现方法
May 30 Python
Python实现截屏的函数
Jul 26 Python
Python生成数字图片代码分享
Oct 31 Python
python机器学习之神经网络(一)
Dec 20 Python
详解Python 正则表达式模块
Nov 05 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
pandas计算最大连续间隔的方法
Jul 04 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
一文读懂python Scrapy爬虫框架
Feb 24 Python
python使用布隆过滤器的实现示例
Aug 20 #Python
QT5 Designer 打不开的问题及解决方法
Aug 20 #Python
Python配置pip国内镜像源的实现
Aug 20 #Python
Python使用lambda抛出异常实现方法解析
Aug 20 #Python
浅谈对python中if、elif、else的误解
Aug 20 #Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 #Python
Python自动化测试中yaml文件读取操作
Aug 20 #Python
You might like
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
javascript修改图片src的方法
2015/01/27 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
解析js如何获取css样式
2016/12/11 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
vue中的scope使用详解
2017/10/29 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
python截取两个单词之间的内容方法
2018/12/25 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
培训主管的岗位职责
2013/11/23 职场文书
技术副厂长岗位职责
2013/12/26 职场文书
党员承诺书格式
2014/05/21 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
关于安全的广播稿
2014/10/23 职场文书
考研英语辞职信
2015/05/13 职场文书
不同意离婚答辩状
2015/05/22 职场文书
Python 内置函数速查表一览
2021/06/02 Python
mysql查看表结构的三种方法总结
2022/07/07 MySQL