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常见文件操作的函数示例代码
Nov 15 Python
Python类的继承和多态代码详解
Dec 27 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
基于python实现KNN分类算法
Apr 23 Python
python3使用matplotlib绘制条形图
Mar 25 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
解决python flask中config配置管理的问题
Jul 26 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
django form和field具体方法和属性说明
Jul 09 Python
Python如何合并多个字典或映射
Jul 24 Python
Python爬虫与反爬虫大战
Jul 30 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
CI框架整合smarty步骤详解
2016/05/19 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
js href的用法
2010/05/13 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
Python简单的制作图片验证码实例
2017/05/31 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python3实现随机数
2018/06/25 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
pycharm导入源码的具体步骤
2020/08/04 Python
护士毕业生自我鉴定
2014/02/08 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
python实现自动清理文件夹旧文件
2021/05/10 Python
python数字类型和占位符详情
2022/03/13 Python
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏