本文将对 tox 做简略的介绍,说不定大家在开发我的项目时可能用得上。
Command line driven CI frontend and development task automation tool**
命令行驱动的 CI 前端和开发工作自动化工具
tox 的我的项目地址是:https://github.com/tox-dev/tox
其核心作用是反对创立隔离的 Python 环境,在外面能够装置不同版本的 Python 解释器与各种依赖库,以此不便开发者做自动化测试、打包、继续集成等事件。
简略来说,tox 是一个治理测试虚拟环境的命令行工具。 它已存在多年且广被开发者们应用,例如,驰名的云计算平台 OpenStack 也采纳了它,作为最根底的测试工具之一。
1、tox 能做什么?
细分的用处包含:
- 创立开发环境
- 运行动态代码剖析与测试工具
- 自动化构建包
- 针对 tox 构建的软件包运行测试
- 查看软件包是否能在不同的 Python 版本 / 解释器中顺利装置
- 对立继续集成(CI)和基于命令行的测试
- 创立和部署我的项目文档
- 将软件包公布到 PyPI 或任何其它平台
tox 官网文档中列出了 40 余种应用场景的示例
2、tox 怎么配置?
对于它的用法:应用pip install tox
装置,应用tox
运行全副测试环境,和tox -e envname
运行指定的环境。还有不少的命令行参数,通过tox -h
查看。
tox 的行为由其配置文件管制,以后它反对 3 种配置文件:
pyproject.toml
tox.ini
setup.cfg
以 tox 我的项目本人的 tox.ini 配置内容为例,能够看到它是这样配置的
每个 [xxx] 及其下方内容组成一个章节(section),每个章节间应用空行作距离。
[tox]上面是全局性的配置项,envlist 字段定义了 tox 去操作的环境。[xxx]上面是 xxx 虚拟环境的配置项,[xxx:yyy]继承 xxx 的配置,同时其本身配置项的优先级更高。
对于每个虚拟环境,可用的配置项很多,例如罕用的有:description(形容信息)、basepython(Python 解释器版本)、deps(环境依赖项)、commands(命令语句)等等。
tox 还反对作变量替换,它提供了一些内置的根底变量(全局的或对于虚拟环境的):{toxinidir}、{homedir}、{envname}、{envdir}等等。
除了基础性的变量替换,它还反对这些高级用法:
- 取操作系统的环境变量:{env:KEY},成果等同于
os.environ['KEY']
。能够变动成:{env:KEY:DEFAULTVALUE},在取不到环境变量时则应用默认值;{env:KEY:{env:DEFAULT_OF_KEY}},达到 if-else 的取值成果 - 传递命令行参数:{posargs:DEFAULTS},当没有命令行参数时,应用 DEFAULTS 值。应用形式:
tox arg1 arg2
传两个参,或者tox -- --opt1 arg1
将“– opt1 arg1”作为整体传入。 - 章节间传值:{[sectionname]valuename},不同章节的内容能够传递应用。
- 交互式控制台注入:{tty:ON_VALUE:OFF_VALUE},当交互式 shell 控制台开启时,应用第一个值,否则应用第二个。pytest 在应用“–pdb”时,是这样的例子。
花括号“{}”除了能够做变量替换应用,它还能够作为“或关系”判断的取值。间接看上面的例子:
[tox]
envlist = {py27,py36}-django{15,16}
{py27,py36}-django{15,16} 的 2 组花括号内各有 2 个值,它们理论能够组合成 4 个环境:py27-django15、py27-django16、py36-django15、py36-django16。
3、tox 的插件化
除了本身弱小的可配置性,tox 还具备很强的可扩展性,它是可插拔的(pluggable),围绕它产生了一个极为丰盛的插件生态。
应用pip search tox
,能够看到数量泛滥的“tox-”结尾的库,它们都是 tox 的插件包。其中不乏 setuptools、pipenv、conda、travis、pytest、docker 等被大家熟知的名字。
tox 凋谢了挺多的 API 接口,不便其他人定制开发插件。
4、tox 的工作流程
接下来看看 tox 是怎么运作的:
其工作流程中次要的环节有:
- 配置(从 figuration):加载配置文件(如 tox.ini),解析命令行参数,读取零碎环境变量等
- 打包(packaging):可选的,对于带有 setup.py 文件的我的项目,能够在这步去生成它的源发行版
- 创立虚拟环境:默认应用 virtualenv 来创立虚拟环境,并依据配置项中的“deps”装置所需的依赖项,而后执行配置好的命令(commands)
- 报告(report):汇总所有虚拟环境的运行后果并列举进去
5、小结
tox 自身定位是一个测试工具,它试图令 Pytho 测试工作变得自动化、标准化与流程化。但跟 unittest 和 pytest 这些测试框架不同,它作用的是代码层面之外的事件,是一种我的项目级的工具。因而,它须要跟这些测试框架相结合,或者同时解决多种自动化工作(如跑 pep8、测代码覆盖率、生成文档等等),这样能力更好地施展它的价值。
它的一大特色在于创立 / 治理虚拟环境,但这只是为了不便测试而应用的伎俩,因而相比其它可治理虚拟环境的工具,如 Virtualenvwrapper、conda、pipenv、poetry,它在某些方面就存在着有余。
tox 还有弱小的可配置性与丰盛的插件反对,这使得它在使用上具备很大的可能性与自由度。
最初还需补充一点,tox 应用配置文件作驱动,但配置文件还是挺繁琐的,因而有人开发了一个跟 tox 类似的nox
,应用 Python 文件来做配置。这个我的项目也很受欢迎,吸引了很多我的项目投入其门下,例如 pipx、urllib3、Salt 等等。
以上就是本次分享的所有内容,如果你感觉文章还不错,欢送关注公众号:Python 编程学习圈,每日干货分享,发送“J”还可支付大量学习材料。或是返回编程学习网,理解更多编程技术常识。