原文链接:http://www.worldhello.net/2010/12/08/2178.html

经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,它用来安装egg包。egg包是目前最流行的python应用打包部署方式。如何制作和安装egg包?下面我就简单的分析了一下。

1.1   安装setuptools

首先要安装setuptools工具。Debian/Ubuntu下可以直接使用apt安装::

$ sudo apt-get install python-setuptools

手工安装的话,有两种方式:

现在就可以使用easy_install命令来安装其他的egg包了。

1.2   制作自己的egg包

总是安装别人的egg包,是不是也想制作自己的egg包呢?好,接下来我们就自己制作一个简单的egg包。 首先建立工程目录egg-demo,初始化一个setup.py文件:

$ mkdir egg-demo
$ cd egg-demo
$ touch setup.py
$ ls
setup.py

下面主要就是填充setup.py。setup.py其实是python工具包distutils的配置文件,setuptools就是基于distutils来做的。 在setup.py中通过setup函数来配置打包信息。首先要引入setuptools的函数setup。setuptools的setup其实就是distutils的setup函数,填写setup.py为以下内容:

$ cat setup.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-from setuptools import setupsetup()

写到这里,一个空的egg配置文件就写好了。我们可以使用下面命令生成egg包:

$ python setup.py bdist_egg

下面看看究竟生成了什么:

$ ls -F
build/ dist/ setup.py UNKNOWN.egg-info/

可以看到多了三个文件夹。而在dist文件夹下,有一个egg文件:UNKNOWN-0.0.0-py2.6.egg。 产蛋成功!先看看这个egg文件是什么格式的:

$ file dist/UNKNOWN-0.0.0-py2.6.egg
dist/UNKNOWN-0.0.0-py2.6.egg: Zip archive data, at least v2.0 to extract

噢,原来就是一个zip压缩包呀!好,再来看看内部构造:

$ unzip -l dist/UNKNOWN-0.0.0-py2.6.egg
Archive:  dist/KNOWN-0.0.0-py2.6.eggLength      Date    Time    Name
---------  ---------- -----   ----120  2010-12-06 17:04   EGG-INFO/SOURCES.txt1  2010-12-06 17:04   EGG-INFO/top_level.txt1  2010-12-06 17:04   EGG-INFO/zip-safe1  2010-12-06 17:04   EGG-INFO/dependency_links.txt227  2010-12-06 17:04   EGG-INFO/PKG-INFO
---------                     -------350                     5 files

只有一个EGG-INFO文件夹,内含五个egg信息文件,没了。 这个egg名称未知,版本0.0.0。这是因为我们在setup里什么也没有设置。 显然,这个egg什么也不能做。 下面给它加点料。 在setup.py中,setup函数接收一系列属性作为配置参数。

还有一些描述性的属性,如description,long_description,author,author_email,license,keywords,platform,url等。 填充setup.py文件如下::

$ cat setup.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-from setuptools import setup, find_packagessetup(name = "demo",version="0.1.0",packages = find_packages(),zip_safe = False,description = "egg test demo.",long_description = "egg test demo, haha.",author = "amoblin",author_email = "amoblin@ossxp.com",license = "GPL",keywords = ("test", "egg"),platforms = "Independant",url = "",)

在egg-demo目录下建立和上述name名称相同的目录demo,demo目录下写__init__.py文件:

$ mkdir demo
$ cat demo/__init__.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-def test():print "Hello, I'm amoblin."if __name__ == '__main__':test()

再次生成egg包以后查看egg包信息:

$ python setup.py bdist_egg
$ unzip -l dist/demo-0.1.0-py2.6.egg
Archive:  dist/demo-0.1.0-py2.6.eggLength      Date    Time    Name
---------  ---------- -----   ----121  2010-12-06 17:30   demo/__init__.py344  2010-12-06 17:46   demo/__init__.pyc137  2010-12-06 17:46   EGG-INFO/SOURCES.txt5  2010-12-06 17:46   EGG-INFO/top_level.txt1  2010-12-06 17:46   EGG-INFO/zip-safe1  2010-12-06 17:46   EGG-INFO/dependency_links.txt227  2010-12-06 17:46   EGG-INFO/PKG-INFO
---------                     -------836                     7 files

可以看到,多了一个文件夹demo,里面有我们写的__init__.py。 奉行敏捷原则,先安装了体验一下再说:

$ sudo python setup.py install
running install
install_dir /usr/local/lib/python2.6/dist-packages/
...
creating /usr/local/lib/python2.6/dist-packages/demo-0.1.0-py2.6.egg
Extracting demo-0.1.0-py2.6.egg to /usr/local/lib/python2.6/dist-packages
demo 0.1.0 is already the active version in easy-install.pthInstalled /usr/local/lib/python2.6/dist-packages/demo-0.1.0-py2.6.egg
Processing dependencies for demo==0.1.0
Finished processing dependencies for demo==0.1.0

OK!安装完毕!接下来我们就可以直接通过import来使用啦!

$ python -c "from demo import test;test()"
Hello, I'm amoblin.

成功输出!这说明安装正确。我们的一个egg包诞生了。 一般情况下,我们的源程序都放在src目录下,所以接下来将demo文件夹移动到src里。但这样也要修改setup.py文件,修改find_packages函数中参数为'src',同时增加package_dir参数:

packages=find_packages('src'),
package_dir = {'':'src'}

这样告诉setuptools在src目录下找包,而不是原来默认的工程根目录。

1.3   egg文件卸载

以python2.6版本为例,egg文件一般安装在/usr/local/lib/python2.6/dist-packages/目录下,该目录下还有一个easy-install.pth文件,用于存放安装的egg信息。:

$ cd /usr/local/lib/python2.6/dist-packages
$ cat easy-install.pth|grep demo
./demo-0.1.0-py2.6.egg
$ ls -F|grep demo
demo-0.1.0-py2.6.egg/

卸载egg文件很简单,首先将包含此egg的行从easy-install.pth中删除,然后删除egg文件夹即可。

python egg学习笔记相关推荐

  1. python自动化测试学习笔记合集二

    python自动化测试学习笔记-4内置函数,处理json 函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改 ...

  2. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

  3. python 正则学习笔记

    python 正则学习笔记 官方document #1.0 import re m=re.search('(?<=abc)def','cxabcdefgb')print(m.group(0))# ...

  4. Python数据结构学习笔记——链表:无序链表和有序链表

    目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...

  5. Python数据结构学习笔记——队列和双端队列

    目录 一.队列的定义 二.队列 实现步骤分析 三.队列的Python实现代码 四.队列的应用 六人传土豆游戏 五.双端队列的定义 六.双端队列 实现步骤分析 七.双端队列的Python实现代码 八.双 ...

  6. Python数据结构学习笔记——栈

    目录 一.栈的定义和特性 (一)栈的定义 (二)栈的反转特性 二.实现分析步骤 三.栈的Python实现代码 四.栈的应用 (一)匹配圆括号 (二)匹配符号 (三)模2除法(十进制转二进制) (四)进 ...

  7. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  8. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化

    本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...

  9. Python基础学习笔记之(二)

    Python基础学习笔记之(二) zouxy09@qq.com http://blog.csdn.net/zouxy09 六.包与模块 1.模块module Python中每一个.py脚本定义一个模块 ...

最新文章

  1. baseUrl must end in /: http://v.juhe.cn/toutiao/index
  2. Android多线程分析之二:Thread的实现
  3. PPT 下载 | 神策数据张涛:企业服务客户全生命周期运营三步曲总览篇
  4. HTML的相关路径与绝对路径的问题---通过网络搜索整理
  5. linux clone线程,如何在Linux上使用clone()创建真正的线程?
  6. crmeb pc端模板下载_PC端人人影视下载速度如何提高
  7. linux packet socket,linux Packet socket (1)简单介绍
  8. 若依的框架怎么样_若依框架的功能代码
  9. php要求输入是个数求平均值、_如何在Excel中求数字个数
  10. python运维开发实战
  11. vue 动态的获取屏幕高度
  12. pdf文档转word/excel/ppt/图片,pdf加解密,pdf添加水印,pdf拆分合并
  13. gc0329曝光时间设置
  14. 移动通信网络规划:无线设备参数
  15. 神经网络的三种训练方法,神经网络训练过程详解
  16. 2022 QS世界大学榜:十年了,世界排名第一还是它...中国大陆大学取得历史最佳...
  17. bt5使用教程----渗透方面
  18. 用C++实现iec61850协议
  19. 测试emmc读写速度软件,真机闪存实测:闪存读取速度到底什么鬼差距有多大建议收藏...
  20. 软件体系结构的第二次实验(解释器风格与管道过滤器风格

热门文章

  1. 玩转多功能QQ机器人【含ChatGPT实现】
  2. 10个现在最流行的网赚(变身富人)
  3. 《地下城与勇士》时尚混搭流行风
  4. 夏季太热 MacBook 如何监控CPU温度和风扇转速?如何判断风扇是否工作?如何手动设置风扇转速?
  5. 开一家咖啡馆如何管理?成功经营的六项要诀
  6. java中BigInteger用法的详解
  7. mybatis SqlSessionFactory . openSession()方法执行过程
  8. Oracle数据库面试题 精选 Oracle 面试题
  9. Web-Flux非阻塞编程
  10. 静态路由配置及RIP配置