简述

项目部署时,发现CI自动打包的Docker镜像内代码不全,最终定位原因是由于python打包时未打包新建的代码文件导致。特意整理本文章,整理python打包配置。

基础信息

python标准打包工具为setuptools,可通过setuptools官方文档详细了解该工具。现整理一些常用内容,记录如下:

基本命令

Python官方文档:https://packaging.python.org/tutorials/distributing-packages/

根据 application 包含的代码类型以及其所支持的 python 版本, wheel 格式可细分为三种

  • Universal wheel:纯 python 代码,并且支持 python 2 和 3
  • Pure python wheel:纯 python 代码,不同时支持 python2 和 3
  • Platform wheel:非纯 python 代码

采用如下命令可编译成 universal wheel:

1
python setup.py bdist_wheel --universal

采用如下命令可编译成非 universal wheel(即 pure python wheel 或 platform wheel):

1
python setup.py bdist_wheel

其它的类型的包:

1
2
3
4
5
python setup.py bdist_egg       # 生成类似 -0.0.1-py2.7.egg,支持 easy_install
python setup.py sdist # 生成类似 -0.0.1.tar.gz,支持 pip
python setup.py build # 编译
python setup.py bdist_wininst # Windows exe
python setup.py bdist_rpm # rpm

配置参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name              -> 为项目名称,和顶层目录名称一致;
version -> 是项目当前的版本,1.0.0.dev1表示1.0.0版,目前还处于开发阶段
description -> 是包的简单描述,这个包是做什么的
long_description -> 这是项目的详细描述,出现在pypi软件的首页上
url -> 为项目访问地址,我的项目放在github上。
author -> 为项目开发人员名称
author_email -> 为项目开发人员联系邮件
license -> 为本项目遵循的授权许可
classifiers -> 有很多设置,具体内容可以参考官方文档
keywords -> 是本项目的关键词,理解为标签
packages -> 是本项目包含哪些包,使用工具函数自动发现包
package_data -> 通常包含与包实现相关的文件
data_files -> 指定其他的一些文件(如配置文件)
cmdclass -> build或install的时候执行的额外操作
entry_points -> 可以定义安装该模块后执行的脚本,比如将某个函数作为linux命令

参考文档