python egg安装包制作 
 
经常接触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
 
1.2   制作自己的egg包
接下来我们就自己制作一个简单的egg包。 首先建立工程目录myeggdemo,初始化一个setup.py文件:
 
$ mkdir myeggdemo
$ cd myeggdemo
$ 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为以下内容
 
:setup函数接收一系列属性作为配置参数。
 
    name name是egg包的名称,也是寻找要打包的文件夹的名称,默认是UNKNOWN。
    version 版本号,默认0.0.0
    packages 这里要用到setuptools的另一个函数find_packages,顾名思义,find_packages用来将指定目录下的文件打包。
    zip_safe 默认是False,这样在每次生成egg包时都会检查项目文件的内容,确保无误。
 
还有一些描述性的属性,如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_packages
 
setup(
  name = 'mydemo',
  version = '0.1.0',
  packages = find_packages('src'), 
  package_dir = {'':'src'}, 
  description = "egg test mydemo",
  
  long_description = "egg test demo.",  
  author = 'zhouguoqing',
  author_email = 'zhouguoqing\@gmail.com',
 
  license = 'GPL',
  keywords = 'test api mydemo',
  platforms = "Independant",
  url = '',
)
 
 
在myeggdemo目录下建立和上述name名称相同的目录mydemo,mydemo目录下写__init__.py文件:
 
$ mkdir mydemo
$ > mydemo/__init__.py
空文件
 
$ vim mydemo/test.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
 
def test():
    print "i'm egg demo"
 
def hello():
    print "Hello egg ok."
 
if __name__ == "__main__":
    test()
    hello()
 
再次生成egg包以后查看egg包信息:
 
$ python setup.py bdist_egg
 
可以看到,多了一个文件夹,先安装了体验一下再说:
 
$ sudo python setup.py install
running install
Copying ...
Processing mydemo-0.1.0-py2.7.egg
Copying mydemo-0.1.0-py2.7.egg to /usr/local/lib/python2.7/dist-packages
Adding mydemo 0.1.0 to easy-install.pth file
 
Installed /usr/local/lib/python2.7/dist-packages/mydemo-0.1.0-py2.7.egg
Processing dependencies for mydemo==0.1.0
Finished processing dependencies for mydemo==0.1.0
OK!安装完毕!接下来我们就可以直接通过import来使用啦!
 
$python -c "from mydemo import test;test.test();test.hello()"
i'm egg demo
Hello egg ok.
 
egg文件卸载
以python2.7版本为例,egg文件一般安装在/usr/local/lib/python2.7/dist-packages/目录下,该目录下还有一个easy-install.pth文件,用于
 
存放安装的egg信息。:
 
$ cd /usr/local/lib/python2.7/dist-packages
$ cat easy-install.pth|grep mydemo
./mydemo-0.1.0-py2.7.egg
$ ls -F|grep mydemo
mydemo-0.1.0-py2.7.egg/
卸载egg文件很简单,首先将包含此egg的行从easy-install.pth中删除,然后删除egg文件夹即可。
vim easy-install.pth 删除 ./mydemo-0.1.0-py2.7.egg 行
sudo rm -rf mydemo-0.1.0-py2.7.egg