setuptools
是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。
安装
- 系统命令安装(apt-get)
sudo apt-get install python-setuptools
- 脚本安装
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
导入setup模块
导入setup模块有两种方式, 如下:
from setuptools import setup
from distutils.core import setup
distutils
是Python标准模块,负责建立Python扩展模块的安装器用的。而setuptools
是第三方模块, 相比而言拥有更多的优点。如下:
- 利用EasyInstall自动查找、下载、安装、升级依赖包
- 创建Python Eggs
- 包含包目录内的数据文件
- 自动包含包目录内的所有的包,而不用在setup.py中列举
- 自动包含包内和发布有关的所有相关文件,而不用创建一个MANIFEST.in文件
- 自动生成经过包装的脚本或Windows执行文件
- 支持Pyrex,即在可以setup.py中列出.pyx文件,而最终用户无须安装Pyrex
- 支持上传到PyPI
- 可以部署开发模式,使项目在sys.path中
- 用新命令或setup()参数扩展distutils,为多个项目发布/重用扩展
- 在项目setup()中简单声明entry points,创建可以自动发现扩展的应用和框架
setup文件模板
from setuptools import setup, find_packages
setup(
name='Demo',
version=0.1,
description='For Testing',
author='',
author_email='',
url='',
package_dir={'': 'src'},
packages=find_packages('src'),
package_data={'': ['*.ini', '*.txt']},
install_requires=[
'requests', 'Flask'],
platforms='any',
scripts=['runner'],
)
- name : 模块的
名称
- version : 发布的
版本号
- description : 关于模块的
简单描述
- author: 开发
作者
- author_email : 开发人员的
邮箱
- url : 模块的homepage
- package_dir : 告诉distutils包的
目录
- packages: 添加可以引入的
Python包
, 可以使用find_packages()
函数自动搜索 - package_data : 添加
非Python数据文件
- install_requires : 指定该模块的
依赖包
,可以加版本条件。用setuptools安装时会先检查本地有没有符合要求的依赖包,如果没有的话,就会从PyPI中获得一个符合条件的最新的包安装到本地 - dependency_links : 如果依赖包无法从PyPI中获取,则需要
指定其下载路径
。路径应指向一个egg包或tar.gz包,也可以是个包含下载地址(一个egg包或tar.gz包)的页面 - scripts :
安装脚本
到标准路径,例如/usr/bin。 安装后可以使用runner
这个shell命令。
打包
(1)Source distribution
使用 sdist
可以打包成 source distribution,支持的压缩格式有:
Format | Description | Notes |
---|---|---|
zip | zip file (.zip) | Windows 默认 |
gztar | gzip’ed tar file (.tar.gz) | Unix 默认 |
bztar | bzip2’ed tar file (.tar.bz2) | |
xztar | xz’ed tar file (.tar.xz) | |
ztar | compressed tar file (.tar.Z) | |
tar | tar file (.tar) |
使用方式为:
$ python setup.py sdist --formats=gztar,zip
现在目录下多出 dist
目录,dist 内保存了我们打好的包Demo-0.1.tar.gz
,上面命令使用 --formats 指定了打出 .tar.gz 和 .zip 包,如果不指定则如上表根据具体平台默认格式打包。
(2)Built distribution
使用 bdist
可以打出 built distribution,和源码包相比,由于预先构建好,所以安装更快:
Format | Description | Notes |
---|---|---|
gztar | gzipped tar file (.tar.gz) | Unix 默认 |
bztar | bzipped tar file (.tar.bz2) | |
xztar | xzipped tar file (.tar.xz) | |
ztar | compressed tar file (.tar.Z) | |
tar | tar file (.tar) | |
zip | zip file (.zip) | Windows 默认 |
rpm | RPM | |
pkgtool | Solaris pkgtool | |
sdux | HP-UX swinstall | |
wininst | self-extracting ZIP file for Windows | |
msi | Microsoft Installer. |
使用上,和 sdist 一样,可以使用 --formats 指定包格式。如:
$ python setup.py bdist --formats=rpm
同时为了简化操作,setuptools 提供了如下命令:
Command | Formats | Notes |
---|---|---|
bdist_dumb | tar, gztar, bztar, xztar, ztar, zip | Windows 默认 zip, Unix 默认 gztar |
bdist_rpm | rpm, srpm | |
bdist_wininst | wininst | |
bdist_msi | msi |
所以上面打 rpm 包可以使用:
$ python setup.py bdist_rpm
如果使用 bdist_wininst,打出来的是 exe 安装文件,可以点击安装。
(3) Wheel
Wheel 也是一种 built 包,而且是官方推荐的打包方式。
使用 wheel 打包,首先要安装 wheel:
$ pip install wheel
然后使用 bdist_wheel 打包:
$ python setup.py bdist_wheel
资料
关于python中的setup.py
Python包管理工具setuptools详解
Python打包分发工具setuptools