乐趣区

关于python:Python-任务自动化工具-tox-教程

本文将对 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 种配置文件:

  1. pyproject.toml
  2. tox.ini
  3. 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”还可支付大量学习材料。或是返回编程学习网,理解更多编程技术常识。

退出移动版