Python egg學習筆記

2021-06-15 10:58:16 字數 4745 閱讀 8260

**:

首先要安裝setuptools工具。debian/ubuntu下可以直接使用apt安裝::

$ sudo apt-get install python-setuptools
手工安裝的話,有兩種方式:
$ wget 

$ sudo python ez_setup.py

更新setuptools::
$ sudo python ez_setup.py -u setuptools
$ wget 

$ sudo sh setuptools-0.6c11-py2.6.egg

現在就可以使用easy_install命令來安裝其他的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函式接收一系列屬性作為配置引數。

還有一些描述性的屬性,如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 = "[email protected]",

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 =

這樣告訴setuptools在src目錄下找包,而不是原來預設的工程根目錄。

以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包的製作與安裝

這篇文章講的很詳細,沒有必要囉嗦啦。plain view plain copy print?setup name spch2008 version 0.1.1 packages find packages zip safe false,description first egg author sun...

學習筆記 雜湊學習筆記

hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...

學習筆記 CentOS 學習筆記01

簡單的做個課堂筆記 虛擬機器用的是vmware,系統是centos cd etc sysconfig network scripts pwdls 顯示列表 cat ifcfg eth0 檢視檔案內容 vi ifcfg eth0 進入vi編輯器 onboot no 原始設定 x逐字刪除 d刪除整行 a...