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 第一步 hello world
Sep 25 Python
python以环状形式组合排列图片并输出的方法
Mar 17 Python
TensorFlow Session会话控制&amp;Variable变量详解
Jul 30 Python
Python实现App自动签到领取积分功能
Sep 29 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
python 多个参数不为空校验方法
Feb 14 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
python unittest单元测试的步骤分析
Aug 02 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
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
js实现文字滚动效果
2016/03/03 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python reduce()函数的用法小结
2017/11/15 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
Python绘制动态水球图过程详解
2020/06/03 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
python os.rename实例用法详解
2020/12/06 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
电子商务专业个人的自我评价
2013/12/19 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
检讨书范文大全
2015/05/07 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS
Golang gRPC HTTP协议转换示例
2022/06/16 Golang