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的文件类型和字符串详解
Dec 21 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
python selenium 弹出框处理的实现
Feb 26 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Python 生成VOC格式的标签实例
Mar 10 Python
关于Django Models CharField 参数说明
Mar 31 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
如何利用python发送邮件
Sep 26 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 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的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
分析python切片原理和方法
2017/12/19 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
影视制作岗位职责
2013/12/04 职场文书
会计稽核岗位职责
2015/04/13 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript