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中模拟enum枚举类型的5种方法分享
Nov 22 Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
一篇文章快速了解Python的GIL
Jan 12 Python
解决python 自动安装缺少模块的问题
Oct 22 Python
python实现转圈打印矩阵
Mar 02 Python
简单了解Python生成器是什么
Jul 02 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
Python3爬虫带上cookie的实例代码
Jul 28 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调用三种数据库的方法(1)
2006/10/09 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
nodejs实用示例 缩址还原
2010/12/28 NodeJs
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
python把转列表为集合的方法
2019/06/28 Python
Pytorch释放显存占用方式
2020/01/13 Python
python如何提升爬虫效率
2020/09/27 Python
python list的index()和find()的实现
2020/11/16 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
滞留工资返还协议书
2014/10/19 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
在人间读书笔记
2015/06/30 职场文书
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python