[python]自问自答:python -m参数? (转) ( python2.7 版本 )
原文地址:
http://www.cnblogs.com/xueweihan/p/5118222.html
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程序了解如何修改或替换模块搜索目录。

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
[python]自问自答:python -m参数? (转) ( python2.7 版本 )的更多相关文章
- [python]自问自答:python -m参数?
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- [python]自问自答:python -m参数? ( python3.7 版本 )
最近在看Python代码的时候看到了一种形式, 即 python -m 这种形式, 查了一些博客,发现了一篇写的还不错,转载了过来,不过那里面写的是Python2.7的环境和python3 ...
- Python学习-将Python3.3.4还原成Python2.6版本
http://blog.csdn.net/dream_angel_z/article/details/45724515
- 洗礼灵魂,修炼python(2)--python安装和配置
安装python和基本配置: python官方下载地址:www.python.org 打开网站,然后下载对应(32位和64位,windows版还是linux版)的版本,你可以选择python3或者2, ...
- Noah的学习笔记之Python篇:函数“可变长参数”
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- 【Python】 linux中python命令的命令行参数
Python命令行参数 原文地址:http://blog.163.com/weak_time/blog/static/25852809120169333247925/ Python的命令行参数,提供了 ...
- java调用python程序以及向python程序传递参数
在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...
- java调用python脚本并向python脚本传递参数
1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...
随机推荐
- Jmeter 抓app包 抓到一半不好用了
错误描述: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl ...
- Python day6_dictionary字典的常见方法1_笔记(基本类型结束)
# 字典的简述 # 1.字典不能做字典的key,列表也不能作为列表的key info={ 'k1':'v1', 'k2':'v2' } print(info) #2.通过键获取值 print(info ...
- byte[]数组与十六进制字符串与字符串的互相转换 ——转载
https://www.cnblogs.com/lelehellow/p/6369631.html
- Confluence 6 为站点禁用匿名用户访问
希望为你的站点禁用匿名用户的访问,取消选择 可以使用(can use)前面的选择框,然后选择 保存所有(Save All).这时候,用户应该禁止访问你的站点直达这些用户登录你的 Confluence ...
- Python下图片的高斯模糊化的优化
资源下载 #本文PDF版下载 Python下图片的高斯模糊化的优化(或者单击我博客园右上角的github小标,找到lab102的W6目录下即可) #本文代码下载 高斯模糊(一维)优化代码(和本文方法集 ...
- 『PyTorch』第三弹重置_Variable对象
『PyTorch』第三弹_自动求导 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Varibale包含三个属性: data ...
- python运维之使用python进行批量管理主机
1. python运维之paramiko 2. FABRIC 一个与多台服务器远程交互的PYTHON库和工具 3. SSH连接与自动化部署工具paramiko与Fabric 4. Python批量管理 ...
- gitlab永久设置密码
在 .gitconfig 文件中加入: [credential] helper = store .git-credentials close address
- html <a>标签介绍
<a href="javascript:void(0)" click="function(){}" />= a 标签样式 一组专门的预定义的 ...
- json 与字符串相互转换,
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...