python 打包(發行)egg 學習筆記

2021-06-26 23:17:43 字數 4715 閱讀 2810



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

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

$ sudo python ez_setup.py 更新setuptools::

$ sudo python ez_setup.py -u setuptools
$ 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資料夾即可。

egg風格 什麼意思 egg框架學習筆記

1 安裝 npm i egg init g egg init egg example type cd egg example yarn install npm run dev localhost 7001 2 多環境配置 config config.default.js config.prod.js...

egg 學習 mysql 回滾操作

egg框架搭建,以及egg mysql包的引入,繁瑣的操作跟著官方文件走就好了 try catch err 這裡有個bug,雖然從官方複製來 但執行時候,不論是否有commit或者rollback,事務操作都會執行,就好像他娘的這一坨 不存在一樣,這是因為mysql預設的儲存引擎是myisam,my...

python解析器打包 python 打包詳解

基本步驟 1.寫setup.py 2.執行 python setup.py sdist 3.在當前目錄下會生成資料夾 dist 打包好的 就在dist中,以 tar.gz 的形式被壓縮 setup.py 模板 usr bin env python from distutils.core import...