python基于setuptools的打包和分发
简介
Setuptools是基于distutils增强的工具,旨在让用户更简单地构建(build)和分发(distribute)python的package。
主要功能:
- 在构建的时候,自动使用EasyInstall tool来下载、安装、更新其他依赖。
- 创建Python Eggs,一种可移动的分发格式。
- 无需
MANIFEST.in文件
安装
1 | pip install -U setuptools |
使用
基础使用
1 | from setuptools import setup, find_packages |
参数含义:
| 名称 | 说明 |
|---|---|
| name | 项目名称 |
| version | 项目版本 |
| packages | 项目包含的数据 |
| entry_points | 项目的主入口 |
| install_requires | 项目依赖包 |
| url | 项目地址 |
| author | 项目作者 |
| author_email | 作者邮箱 |
| description | 项目简要描述 |
扩展(extension)
Distutils目前只支持C/C++/Objective-Ç
打包
源码包(source distribution, sdist)
1 | python setup.py sdist |
生成的是dist/xxx.tar.gz。
wheel
wheel本质上是一个zip包格式,它使用.whl 扩展名,用于 python 模块的安装,它的出现是为了替代 Eggs。
1 | python setup.py bdist_wheel |
生成的是带平台信息的.whl文件,比如pytorch在pypi上的文件:

其中manylinux1需要注意,这种格式支持多多数linux系统。参考这篇文章
我的做法是:使用这个仓库提到的镜像:quay.io/pypa/manylinux2010_x86_64。在该镜像下先生成.whl。然后进入镜像,使用auditwheel工具将其修改为manylinux1。
1 | pip3 install auditwheel |
得到manylinux1_x86_64.whl。
.whl文件像是一个安装包,你需要把这个安装包上传到pypi的网站上让其他人用。你自己也可以直接:
1 | pip install xxx.whl |
来安装这个包。
注意:如果是tensorflow相关的打包,可以修改policy.json,参考这里。另外,tensorflow相关打包的镜像推荐使用(参考):
1 | # For manylinux2010 |
检查
1 | twine check dist/* |
分发
在~/.pypirc中配置用户名和密码:
1 | [distutils] |
上传:
1 | twine upload dist/xxx.whl |