https://docs.python.org/zh-cn/3.7/distutils/introduction.html
distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块。
模块构建流程- 编写setup脚本(一般是setup.py)
- 编写一个setup配置文件(可选)
- 创建一个源码发布
- 创建一个或多个构建(二进制)发布(可选)
from distutils.core import setup
setup(
name='aaa',
version='1.0.0',
include_package_data=True,
packages=['aaa', 'aaa.bbb'],
package_dir={'aaa': 'src'},
package_data={
'aaa': ['bbb/*.config'],
},
data_files=[
('config', ['src/bbb/ccc.config']),
],
)
- name 包名
- version 版本
- packages 导入包(包下所有py文件)
- package_dir 包所在目录
- package_data 静态文件(复制到相对目录)
- data_files 静态文件(安装到指定python系统目录)
python setup.py sdist
sdist命令会创建一个archive 文件(比如Unix上的tar文件,Windows上的zip文件),它包含setup.py, 源码文件。该archive文件命名为aaa-1.0.0.tar.gz(zip)
安装模块用户希望安装aaa模块,他只需要下载aaa-1.0.0.tar.gz,解压,进入aaa-1.0.0目录,然后运行
python setup.py install
该命令最终会将foo.py复制到Python环境存放第三方模块的目录中
构建发布python setup.py bdistsetuptools
setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。
模块构建流程- 编写setup脚本(一般是setup.py)
- 编写一个setup配置文件(可选)
- 打包
- 安装
from setuptools import setup, find_packages
setup(
name='aaa',
version='1.0.0',
include_package_data=True,
packages=find_packages('src'),
install_requires=[
'bbb>=0.10',
],
# package_dir={'nxx': 'src'},
# package_data={
# 'nxx': ['log/*.config'],
# },
# data_files=[
# ('config', ['src/log/log.config']),
# ],
)
- name 包名
- version 版本
- include_package_data = True,启用清单文件MANIFEST.in包含数据文件
- packages 导入包(包下所有py文件),find_packages(src)自动找到src目录下所有包
- install_requires 自动安装依赖
- package_dir 包所在目录
- package_data 静态文件(复制到相对目录)
- data_files 静态文件(安装到指定python系统目录)
python setup.py bdist_egg
当前目录下的dist目录内创建一个egg文件,名为aaa-1.0-py3.7.egg(zip压缩文件), 文件名格式就是”应用名-版本号-Python版本.egg”。
当前目录多了”build”和”MyApp.egg-info”子目录来存放打包的中间结果。
安装easy_install aaa-1.0-py3.7.egg # 或者 easy_install aaa-1.0-py3.7.wheel # 或者 pip install aaa-1.0-py3.7.wheel # 或者 python setup.py install通用命令
- build 构建
- sdist 源码分发
- install 源码安装
- bdist 可执行文件分发
- bdist_egg egg文件分发
- bdist_wheel wheel文件分发
支持创建隔离的 Python 环境,在里面可以安装不同版本的 Python 解释器与各种依赖库,以此方便开发者做自动化测试、打包、持续集成等事情。
配置文件- pyproject.toml
- tox.ini
- setup.cfg
- [tox]下面是全局性的配置项,envlist 字段定义了 tox 操作的环境
- [xxx]下面是 xxx 虚拟环境的配置项,[xxx:yyy]继承 xxx 的配置,同时其自身配置项的优先级更高
- 常用的配置项有:description(描述信息)、basepython(Python解释器版本)、deps(环境依赖项)、commands(命令语句)等等
- 内置的基础变量{toxinidir}、{homedir}、{envname}、{envdir}
- 操作系统的环境变量:{env:KEY},效果等同于os.environ['KEY']
- 配置(figuration):加载配置文件(如 tox.ini),解析命令行参数,读取系统环境变量等
- 打包(packaging):可选的,对于带有 setup.py 文件的项目,可以在这步去生成它的源发行版
- 创建虚拟环境:默认使用 virtualenv 来创建虚拟环境,并根据配置项中的“deps”安装所需的依赖项,然后执行配置好的命令(commands)
- 报告(report):汇总所有虚拟环境的运行结果并罗列出来



