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好用的多,基本滿足大型項目的安裝和發布
2.安裝setuptools
- 最簡單安裝,假定在ubuntu下
sudo apt-get install python-setuptools - 啟動腳本安裝
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
3.創建一個簡單的包
有了setuptools后,創建一個包基本上是無腦操作
cd /tmp
mkdir demo
cd demo
4、在demo中創建一個setup.py文件,寫入如下內容:
from setuptools import setup, find_packages
setup(
name = "demo",
version = "0.1",
packages = find_packages(),
)
5、執行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
包里面是一系列自動生成的文件
6、setup() 函數可用參數解釋
name
egg name
name = "HelloWorld"
version = "0.1"
版本號
version = "0.1"
packages
所要包含的package(包含__init__.py的文件夾),find_packages() 函數在后面會有解釋
packages = find_packages()
package_dir
所要搜索的 package 路徑,這個需要與 find_packages() 中的參數成對使用,詳見后面的測試
scripts
指定python源碼文件
scripts = ['say_hello.py']
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/"