**:
首先要安裝setuptools工具。debian/ubuntu下可以直接使用apt安裝::
$ sudo apt-get install python-setuptools手工安裝的話,有兩種方式:
$ wget更新setuptools::$ sudo python ez_setup.py
$ 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下面主要就是填充setup.py。setup.py其實是python工具包distutils的配置檔案,setuptools就是基於distutils來做的。 在setup.py中通過setup函式來配置打包資訊。首先要引入setuptools的函式setup。setuptools的setup其實就是distutils的setup函式,填寫setup.py為以下內容:$ cd egg-demo
$ touch setup.py
$ ls
setup.py
$ cat setup.py寫到這裡,乙個空的egg配置檔案就寫好了。我們可以使用下面命令生成egg包:#!/usr/bin/env python
#-*- coding:utf-8 -*-
from setuptools import setup
setup()
$ python setup.py bdist_egg下面看看究竟生成了什麼:
$ ls -f可以看到多了三個資料夾。而在dist資料夾下,有乙個egg檔案:unknown-0.0.0-py2.6.egg。產蛋成功!先看看這個egg檔案是什麼格式的:build/ dist/ setup.py unknown.egg-info/
$ file dist/unknown-0.0.0-py2.6.egg噢,原來就是乙個zip壓縮包呀!好,再來看看內部構造:dist/unknown-0.0.0-py2.6.egg: zip archive data, at least v2.0 to extract
$ unzip -l dist/unknown-0.0.0-py2.6.egg只有乙個egg-info資料夾,內含五個egg資訊檔案,沒了。這個egg名稱未知,版本0.0.0。這是因為我們在setup裡什麼也沒有設定。顯然,這個egg什麼也不能做。下面給它加點料。在setup.py中,setup函式接收一系列屬性作為配置引數。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
還有一些描述性的屬性,如description,long_description,author,author_email,license,keywords,platform,url等。填充setup.py檔案如下::
$ cat setup.py在egg-demo目錄下建立和上述name名稱相同的目錄demo,demo目錄下寫__init__.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 = "",
)
$ mkdir demo再次生成egg包以後檢視egg包資訊:$ cat demo/__init__.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def test():
print "hello, i'm amoblin."
if __name__ == '__main__':
test()
$ python setup.py bdist_egg可以看到,多了乙個資料夾demo,裡面有我們寫的__init__.py。奉行敏捷原則,先安裝了體驗一下再說:$ 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
$ sudo python setup.py installok!安裝完畢!接下來我們就可以直接通過import來使用啦!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
$ python -c "from demo import test;test()"成功輸出!這說明安裝正確。我們的乙個egg包誕生了。一般情況下,我們的源程式都放在src目錄下,所以接下來將demo資料夾移動到src裡。但這樣也要修改setup.py檔案,修改find_packages函式中引數為'src',同時增加package_dir引數:hello, i'm amoblin.
packages=find_packages('src'),這樣告訴setuptools在src目錄下找包,而不是原來預設的工程根目錄。package_dir =
以python2.6版本為例,egg檔案一般安裝在/usr/local/lib/python2.6/dist-packages/目錄下,該目錄下還有乙個easy-install.pth檔案,用於存放安裝的egg資訊。:
$ cd /usr/local/lib/python2.6/dist-packages解除安裝egg檔案很簡單,首先將包含此egg的行從easy-install.pth中刪除,然後刪除egg資料夾即可。$ cat easy-install.pth|grep demo
./demo-0.1.0-py2.6.egg
$ ls -f|grep demo
demo-0.1.0-py2.6.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...