常常接触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
手工装置的话,有两种形式:
经过疏导顺序 ez_setup.py 来装置。这个疏导顺序会联网下载最新版本setuptools来装置,同时也能够更新内陆的setuptools。
$ wget http://peak.teleco妹妹unity.com/dist/ez_setup.py $ sudo python ez_setup.py
更新setuptools::
$ sudo python ez_setup.py -U setuptools
或许下载setuptools的egg包来装置。能够正在 这里 查看最新版本下载。下载终了当前经过sh装置。
$ wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg $ sudo sh setuptools-0.6c11-py2.6.egg
如今就能够应用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 setup setup()
写到这里,一个空的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.egg Length Date Time Name --------- ---------- ----- ---- 120 2010-12-06 17:04 EGG-INFO/SOURCES.txt 1 2010-12-06 17:04 EGG-INFO/top_level.txt 1 2010-12-06 17:04 EGG-INFO/zip-safe 1 2010-12-06 17:04 EGG-INFO/dependency_links.txt 227 2010-12-06 17:04 EGG-INFO/PKG-INFO --------- ------- 350 5 files
只有一个EGG-INFO文件夹,内含五个egg信息文件,没了。 这个egg称号未知,版本0.0.0。这是由于咱们正在setup里甚么也不设置。 显然,这个egg甚么也不克不及做。 上面给它加点料。 正在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 = "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.egg Length Date Time Name --------- ---------- ----- ---- 121 2010-12-06 17:30 demo/__init__.py 344 2010-12-06 17:46 demo/__init__.pyc 137 2010-12-06 17:46 EGG-INFO/SOURCES.txt 5 2010-12-06 17:46 EGG-INFO/top_level.txt 1 2010-12-06 17:46 EGG-INFO/zip-safe 1 2010-12-06 17:46 EGG-INFO/dependency_links.txt 227 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.pth Installed /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教程》
以上就是python egg怎样装置的具体内容,更多请存眷资源魔其它相干文章!
标签: Python python教程 python编程 python使用问题
抱歉,评论功能暂时关闭!