Python包管理工具setuptools詳解及entry point

1.什麼是setuptools?
setuptools是Python distutils加強版的集合,它能夠幫助咱們更簡單的建立和分發Python包,尤爲是擁有依賴關係的。用戶在使用setuptools建立包時,並不須要已安裝setuptools,只要一個啓動模塊便可。
功能亮點:
利用EasyInstall自動查找、下載、安裝、升級依賴包
建立Python Eggs
包含包目錄內的數據文件
自動包含包目錄內的全部的包,而不用在setup.py中列舉
自動包含包內和發佈有關的全部相關文件,而不用建立一個MANIFEST.in文件
自動生成通過包裝的腳本或Windows執行文件
支持Pyrex,即在能夠setup.py中列出.pyx文件,而最終用戶無須安裝Pyrex
支持上傳到PyPI
能夠部署開發模式,使項目在sys.path中
用新命令或setup()參數擴展distutils,爲多個項目發佈/重用擴展
在項目setup()中簡單聲明entry points,建立能夠自動發現擴展的應用和框架
總之,setuptools就是比distutils好用的多,基本知足大型項目的安裝和發佈python

2.安裝setuptools
1) 最簡單安裝,假定在ubuntu下
sudo apt-get install python-setuptools
2) 啓動腳本安裝
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.pylinux

3.建立一個簡單的包
有了setuptools後,建立一個包基本上是無腦操做
cd /tmp
mkdir demo
cd demoubuntu

四、在demo中建立一個setup.py文件,寫入以下內容:
from setuptools import setup, find_packages
setup(
name = "demo",
version = "0.1",
packages = find_packages(),
)框架

五、執行python setup.py bdist_egg便可打包一個test的包
demo
|-- build
| -- bdist.linux-x86_64 |-- demo.egg-info | |-- dependency_links.txt | |-- PKG-INFO | |-- SOURCES.txt |-- top_level.txt
|-- dist
| -- demo-0.1-py2.7.egg-- setup.py
在dist目錄下生成的是egg包
生成的.egg文件,改爲zip擴展名,解開看看先
upzip -l dist/demo-0.1-py2.7.egg函數

Archive: dist/demo-0.1-py2.7.egg
Length Date Time Name
--------- ---------- ----- ----
1 2013-06-07 22:03 EGG-INFO/dependency_links.txt
1 2013-06-07 22:03 EGG-INFO/zip-safe
120 2013-06-07 22:03 EGG-INFO/SOURCES.txt
1 2013-06-07 22:03 EGG-INFO/top_level.txt
176 2013-06-07 22:03 EGG-INFO/PKG-INFO
--------- -------
299 5 files
包裏面是一系列自動生成的文件測試

六、setup() 函數可用參數解釋
name
egg name
name = "HelloWorld"ui

version = "0.1"
版本號
version = "0.1"url

packages
所要包含的package(包含__init__.py的文件夾),find_packages() 函數在後面會有解釋
packages = find_packages()
package_dir
所要搜索的 package 路徑,這個須要與 find_packages() 中的參數成對使用,詳見後面的測試code

scripts
指定python源碼文件
scripts = ['say_hello.py']ip

install_requires
install_requires = ['docutils>=0.3']

package_data
所要包含的包中的文件,格式爲:
package name : [file name],當 package name 爲空時,表明全部包,file name 能夠爲 .txt 之類的表達。具體能夠看右邊的例子
package_data = {
If any package contains
.txt or .rst files, include them用以下命令:
'': ['.txt', '.rst'],
And include any
.msg files found in the 'hello' package, too用以下命令:
'hello': ['*.msg']
}
author
author = "Me"
author_email

author_email = "me@example.com"

description
description = "This is an Example Package"

license
license = "PSF"

keywords
keywords = "hello world example examples"

url 項目主頁(home page) url = "http://example.com/HelloWorld/"

相關文章
相關標籤/搜索