本文主要介绍如何把个人编写的 Python 应用打包并上传到官方仓库 PyPI,使得可以直接通过 pip 进行安装使用,并在 PyPI 上进行维护。
分发工具 setuptools
曾经 Python 的分发工具是 distutils,但它无法定义包之间的依赖关系。setuptools 则是它的增强版,能帮助我们更好的创建和分发 Python 包,尤其是具有复杂依赖关系的包。其通过添加一个基本的依赖系统以及许多相关功能,弥补了该缺陷。他还提供了自动包查询程序,用来自动获取包之间的依赖关系,并完成这些包的安装,大大降低了安装各种包的难度,使之更加方便。
一般 Python 安装会自带 setuptools,如果没有可以使用 pip 安装:
$ pip install setuptools
setuptools 简单易用,只需写一个简短的 setup.py 安装文件,就可以将你的 Python 应用打包。
第一个安装文件
在目录 learn_setup 下新建安装文件 setup.py,然后创建包 myapp 模拟要打包源码包:
.
├── myapp
│ └── __init__.py
└── setup.py
一个最简单的 setup.py 文件内容如下:
from setuptools import setup
setup(
name='firstApp', # 应用名
version='0.0.1', # 版本号
packages=['myapp'], # 包括在安装包内的 Python 包
)
使用安装文件创建 wheel
有了上面的 setup.py 文件,我们就可以打出各种安装包,主要分为两类:sdist 和 bdist。
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 和 *.egg-info 目录,dist 内保存了我们打好的包,上面命令使用
--formats
指定了打出
.tar.gz
和
.zip
包,如果不指定则如上表根据具体平台默认格式打包。
包的名称为
setup.py
中定义的
name
,