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.py3.创建一个简单的包
有了setuptools后,创建一个包基本上是无脑操作 cd /tmp mkdir demo cd demo4、在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_emailauthor_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/"