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 |