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好用的多,基本滿足大型項目的安裝和發布

2.安裝setuptools

  1. 最簡單安裝,假定在ubuntu下
    sudo apt-get install python-setuptools
  2. 啟動腳本安裝
    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/"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM