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 基础之字符串string详解及实例
Apr 01 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
使用Python实现跳帧截取视频帧
May 31 Python
python批量下载抖音视频
Jun 17 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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下使用以下代码连接并测试
2008/04/09 PHP
php 中文处理函数集合
2008/08/27 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
为PHP5.4开启Zend OPCode缓存
2014/12/26 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
Python多图片合并PDF的方法
2019/01/03 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
《春笋》教学反思
2014/04/15 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
项目工作说明书
2014/07/29 职场文书
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis