Python 打包管理工具 setuptools

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

你可能感兴趣的:(Python 打包管理工具 setuptools)