今天在阅读以前项目代码时,发现里面使用的第三方模块的参数相当诡异,总是对不上。经过分析之后,发现是自己安装的第三方模块跟项目使用的版本不一致。在Python中进行模块/包管理的话,就不得不提到easy_install了,它的好处,“谁用谁知道”啊!!!

一、安装easy_install

请各位到 http://pypi.python.org/pypi/setuptools 选择适合自己的安装包,我选择的是setuptools 0.6c11,另外竹风使用的是64位的Python,所以下载了 ez_setup.py 自行安装。文档里说得很清楚。安装完成后,easy_install 会被添加进环境变量中。比如在竹风的 CentOS 上,可以直接在命令行输入 "easy_install -h" 来查看相关帮助了。

二、使用easy_install安装第三方模块/包

操作相当简单,比如竹风现在想安装 tornado 的话,只需要输入"easy_install torando"即可。
    值得注意的是,上面这种情况默认安装的是 https://pypi.python.org/pypi 提供的最新版本,这在某些情况下会引发些不必要的疑惑。
    依旧以tornado为例,pypi 现在提供的版本为3.1,但是竹风阅读的项目使用的是2.2.1,这两个版本之间的差别还是相当多的。
    幸好 easy_install 提供了安装指定版本的功能,比如"easy_install tornado==2.2.1" 就能安装tornado 2.2.1了。

三、easy_install内部如何管理

easy_install对于第三方模块/包的安装路径,默认是Python的 site-packages ,比如竹风的是 /usr/lib/python2.6/site-packages 。大家可以在该目录下找到 easy-install.pth 文件。该文件里面记录了使用easy_install安装的模块/包。而且能从这个文件中判断出当前使用的模块/包的版本。以竹风的easy-install.pth为例:

 $ cat easy-install.pth
import sys; sys.__plen = len(sys.path)
./setuptools-0.6c11-py2.6.egg
./configobj-4.7.2-py2.6.egg
./redis-2.7.2-py2.6.egg
./tornado-2.2.1-py2.6.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

从文件信息中,可以发现目前已经安装的模块/包,以及相关的版本信息。

四、卸载模块/包

easy_install当然也提供了卸载模块/包的功能。但是必须要注意的是,该模块/包必须要在 easy-install.pth 有相关信息,换句话说,也就是要使用easy_install安装的,才可进行卸载。命令如下: "easy_install -m redis",这样就会将Python中的redis模块卸载。

五、安装的模块/包是egg文件?

在安装第三方模块/包的时候,有可能会发现安装的是一个egg文件,比如“redis-2.7.2-py2.6.egg”。对于好学的程序猿们,想看它的源代码该怎么办呢?相当简单,只需要执行以下unzip就可以了,"unzip redis-2.7.2-py2.6.egg"就可以把源代码解出来。

六、easy_install的其他参数

本文篇幅有限,并不能对easy_install的所有参数进行一一介绍。对照下图,大家可以自行琢磨其他参数的使用方法:

比较值得一提的是 “-d” 参数,可以指定安装目录。这个对于测试是很方便的。比如可以新建一个tmp目录,在里面安装一些模块/包进行测试(此时在tmp目录中也会生成一个easy_install.pth文件,个人推测easy_install在运行时会将所有的pth文件够过一次)。当测试完毕后,只需要将tmp目录删除。

当然还有 "-z" 和 "-Z",总是打包成zip文件 or 总是解压。

希望本文对大家有所帮助^_^

  

  

Python札记 -- 使用easy_install进行模块/包管理的更多相关文章

  1. 使用easy_install进行模块/包管理

    使用easy_install进行模块/包管理 今天在阅读以前项目代码时,发现里面使用的第三方模块的参数相当诡异,总是对不上.经过分析之后,发现是自己安装的第三方模块跟项目使用的版本不一致.在Pytho ...

  2. Python的支持工具[0] -> 环境包管理工具[0] -> pip

    pip包管理工具 / pip Package Management Tools pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_install工具. 1 pip ...

  3. [Python]import使用的疑难杂症与包管理

    概念:模块与包 模块module:一般是以.py为后缀的文件,也包括.pyo..pyc..pyd..so和.dll后缀的文件,模块内定义了函数.类以及变量 包package:包是含有若干个模块的文件夹 ...

  4. Python的支持工具[0] -> 环境包管理工具[1] -> Anaconda

    Anaconda包管理工具 / Anaconda Package Management Tools Anaconda is the world’s most popular Python data s ...

  5. nodejs,python,sublime和Eclipse的包管理器

    Python的包管理器叫pip. 首先安装Python运行环境Python 3.7.0:https://www.python.org/downloads/release/python-370/ Pyt ...

  6. Python学习笔记5:模块/包

    1.模块 模块简单理解就是一组功能的集合. 在Python中,一个文件(.py)就是一个模块,文件名即模块名. 模块的好处是大大提高代码的可维护性,其次,代码不必从零开始.当一个模块编写完毕,就可以被 ...

  7. python文件打包格式,pip包管理

    1..whl是python文件的一种打包格式, 在有些情况下,可以将文件的后缀名改为.zip并解压 2.cmd中,提示pip版本太低,先升级pip   pip install --upgrade pi ...

  8. Python学习(六)模块 —— 包

    Python 包 包 定义 为了组织好模块,会将多个模块分为包.Python 处理包也是相当方便的.简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件. 常见的包结构如下:

  9. Python 入门基础18 --re模块+内存管理

    今日内容: 1.垃圾回收机制 2.re模块 一.垃圾回收机制 在计算机中,不能被程序访问到的数,称之为垃圾 1.1 引用计数 引用计数用来记录值的内存地址被记录的次数 每引用一次就对标记 +1 操作 ...

随机推荐

  1. django搭建论坛之一环境配置

    环境情况: Description:    Ubuntu 15.04   Python版本:   Python 2.7.9 django版本: 1.8.4 安装django: pip install ...

  2. PHP单引号和双引号对待变量的不同

    如果一个变量放在单引号中,会被当作字符串来处理,如果是放在双引号中,则会被当值一个变量来处理(此时可以用 {}扩起来,也可以不用). <?php $txt = "hello, this ...

  3. UIMenuController 弹出菜单框

    弹出菜单框 UIMenuItem *menuItem1 = [[UIMenuItem alloc] initWithTitle:@"删除" action:@selector(del ...

  4. Daily Scrum 12.15

    今日完成任务: 完成关于主页右侧资源显示的算法优化:解决了下载资源时的异常. 遇到困难: 编译课设这周要检查,小组成员的大部分时间在完成编译课设,时间很紧. 明日任务: 孙思权 完成第二组提供的数据库 ...

  5. 大型网站seo优化之行业网站seo优化具体操作思路

      第一部分:站内优化 第二部分:站外优化 第三部分:内容建设 第四部分:网站完善 一.站内优化 1.站内结构优化 2.内链策略 3.站内细节优化 4.网站地图设置 5.关键词竞争度分析 5.关键词部 ...

  6. mysql Statement violates GTID consistency 的坑

    今天项目迁移,重新换了一个数据库版本,然后问题来了,原本运行正常的程序迁移过来之后就是不能正常运行,后台报错如下: update tbl_user_info set -- 强制下架 mv_count ...

  7. PHP的继承方法如何获取子类名

    http://blog.csdn.net/zls986992484/article/details/53154097 PHP后期静态绑定问题:例如 <?php class A { functio ...

  8. ASP数组全集,多维数组和一维数组[转]

    ASP数组是比较好用的装载大量数据的容器.1 定义数组 有两种方式:DIM和REDIM. DIM定义的是固定个数.数据类型的数组:而REDIM则不同,它可以定义不同类型的数据,也可以定义个数并非固定的 ...

  9. ZooKeeper事务日志记录器SyncRequestProcessor

    SyncRequestProcessor作为一个ZooKeeper中的一个关键线程(ZooKeeperCriticalThread),是ZooKeeper请求处理链中的事务日志记录处理器,其主要用来将 ...

  10. Linux 下curl模拟Http 的get or post请求

    一.get请求 curl "http://www.baidu.com"  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl -i "http:// ...