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 相关文章推荐
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
Python中matplotlib中文乱码解决办法
May 12 Python
python的re正则表达式实例代码
Jan 24 Python
Python获取时间戳代码实例
Sep 24 Python
图解python全局变量与局部变量相关知识
Nov 02 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
python如何操作mysql
Aug 17 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
python中os.remove()用法及注意事项
Jan 31 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
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
python批量处理txt文件的实例代码
2020/01/13 Python
Python使用Matlab命令过程解析
2020/06/04 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
Python定义一个函数的方法
2020/06/15 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
绿色城市实施方案
2014/03/19 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android