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 相关文章推荐
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python 递归函数详解及实例
Dec 27 Python
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
python实现公司年会抽奖程序
Jan 22 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
Python高级特性 切片 迭代解析
Aug 23 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
Python基于locals返回作用域字典
Oct 17 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 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
文章推荐系统(三)
2006/10/09 PHP
在Windows版的PHP中使用ADO
2006/10/09 PHP
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
使用python分析git log日志示例
2014/02/27 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
python遍历数组的方法小结
2015/04/30 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python正则表达式和元字符详解
2018/11/29 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
Django如何重置migration的几种情景
2021/02/24 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
介绍一下JNDI的基本概念
2013/07/26 面试题
军训心得体会
2013/12/31 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
学校标语大全
2014/06/19 职场文书
社团活动总结模板
2014/06/30 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
灵魂歌王观后感
2015/06/17 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL