网易首页 > 网易号 > 正文 申请入驻

Python任务自动化工具tox教程

0
分享至

  在我刚翻译完的 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 余种使用场景的示例,详细的列表可查看:https://tox.readthedocs.io/en/latest/examples.html

2、tox 怎么配置?

  关于它的用法:使用pip install tox安装,使用tox运行全部测试环境,和tox -e envname运行指定的环境。还有不少的命令行参数,通过tox -h查看。

  tox 的行为由其配置文件控制,当前它支持 3 种配置文件:

  pyproject.toml

  tox.ini

  setup.cfg

  以 tox 项目自己的 tox.ini 配置内容为例,可以看到它是这样配置的(https://github.com/tox-dev/tox/blob/master/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。

  关于 tox 有哪些配置项、使用条件、什么含义、高级用法等等内容,可在官方文档中查看:https://tox.readthedocs.io/en/latest/config.html

  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 等等。对该项目感兴趣的话,请查看:https://nox.thea.codes/en/stable作者简介:豌豆花下猫,生于广东毕业于武大,现为苏漂程序员,有一些极客思维,也有一些人文情怀,有一些温度,还有一些态度。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
破案了!看了牢A的直播后,终于知道宋祖儿为什么会被全网黑了!

破案了!看了牢A的直播后,终于知道宋祖儿为什么会被全网黑了!

乐悠悠娱乐
2026-01-22 08:57:21
中国电视干掉韩国巨头,12月出货量首超三星,终结霸主地位!

中国电视干掉韩国巨头,12月出货量首超三星,终结霸主地位!

i王石头
2026-02-20 23:52:58
扮猪吃老虎,中国3枚冬奥会速度滑冰金牌,都是打的“埋伏”

扮猪吃老虎,中国3枚冬奥会速度滑冰金牌,都是打的“埋伏”

真理是我亲戚
2026-02-20 13:49:07
阿奇姆彭和英博完成签约!国安新洋枪抵苏,德转确认海港重大不利

阿奇姆彭和英博完成签约!国安新洋枪抵苏,德转确认海港重大不利

刀锋体育
2026-02-20 20:49:20
袁和平揭秘《镖人》使用 AI 工具 Seedance 2.0 打造片尾彩蛋

袁和平揭秘《镖人》使用 AI 工具 Seedance 2.0 打造片尾彩蛋

环球网资讯
2026-02-20 11:44:45
说句扎心的大实话,咱们在南海的“牌”,一开始烂到家了。

说句扎心的大实话,咱们在南海的“牌”,一开始烂到家了。

南权先生
2026-01-27 15:44:44
看了《镖人》,才发现吴京最正确的决定,就是换掉女主选择陈丽君

看了《镖人》,才发现吴京最正确的决定,就是换掉女主选择陈丽君

断翼的鸟儿
2026-02-20 23:15:57
中国队后程发力!3天获4金,跻身冬奥战绩前3,有望再获2金

中国队后程发力!3天获4金,跻身冬奥战绩前3,有望再获2金

奥拜尔
2026-02-20 22:57:31
原来孙俪现实里长这样,这颜值真绝了!

原来孙俪现实里长这样,这颜值真绝了!

可乐谈情感
2026-02-21 00:20:49
朱雪梅婆家寿宴遭围观:全程玩手机无视宾客,老公一个动作太圈粉

朱雪梅婆家寿宴遭围观:全程玩手机无视宾客,老公一个动作太圈粉

壹月情感
2026-02-20 22:06:00
《飞驰人生3》爆火,韩寒现状,谁能想到…

《飞驰人生3》爆火,韩寒现状,谁能想到…

妙知
2026-02-19 21:14:10
黄渤青岛宴请岳父母,海鲜大餐摆满桌,结婚多年的妻子气质真好

黄渤青岛宴请岳父母,海鲜大餐摆满桌,结婚多年的妻子气质真好

墨语家
2026-02-19 18:24:53
能否避免?曼城上一次被纽卡联赛双杀是在1983/84赛季

能否避免?曼城上一次被纽卡联赛双杀是在1983/84赛季

懂球帝
2026-02-21 00:38:56
你有没有发现,酒文化随着反腐败的深入,正在悄悄地发生变化

你有没有发现,酒文化随着反腐败的深入,正在悄悄地发生变化

细说职场
2026-02-20 09:46:04
尾盘猛拉,大涨近43%!港股AI概念大爆发

尾盘猛拉,大涨近43%!港股AI概念大爆发

证券时报e公司
2026-02-20 17:09:47
蒋介石始终不知:“吴石案”唯一活口,竟是潜伏数十年的愚农夫!

蒋介石始终不知:“吴石案”唯一活口,竟是潜伏数十年的愚农夫!

慕名而来只为你
2026-02-20 22:40:18
早已杀青却播出无望的7部剧,部部可惜,尤其是最后一部

早已杀青却播出无望的7部剧,部部可惜,尤其是最后一部

小Q侃电影
2026-01-25 13:16:28
花样滑冰女单:美国华裔刘美贤夺金,坂本花织银牌,张瑞阳第19

花样滑冰女单:美国华裔刘美贤夺金,坂本花织银牌,张瑞阳第19

懂球帝
2026-02-20 06:38:04
决裂!皇马双核硬刚穆里尼奥:你敢来,我们就反!

决裂!皇马双核硬刚穆里尼奥:你敢来,我们就反!

澜归序
2026-02-20 09:29:05
“小婉君”金铭45岁现状:个子太矮事业受挫,住北京豪宅不婚不育

“小婉君”金铭45岁现状:个子太矮事业受挫,住北京豪宅不婚不育

削桐作琴
2026-01-29 00:03:53
2026-02-21 01:00:49
Python猫 incentive-icons
Python猫
人生苦短,我用Python。博客:https://pythoncat.top
729文章数 8121关注度
往期回顾 全部

科技要闻

莫迪举手欢呼 两大AI掌门人却握拳尴尬对峙

头条要闻

女子下车接电话将900克黄金遗落在动车上 价值约135万

头条要闻

女子下车接电话将900克黄金遗落在动车上 价值约135万

体育要闻

金牌夫妻!王心迪徐梦桃赛后拥抱太甜了

娱乐要闻

《将门独后》开拍,王鹤棣孟子义主演

财经要闻

太疯狂!“顾客不问价直接出手”

汽车要闻

比亚迪的“颜值担当”来了 方程豹首款轿车路跑信息曝光

态度原创

时尚
艺术
家居
手机
旅游

冬季羽绒服是最“受捧”的单品,这样选款和搭配,舒适耐看

艺术要闻

你绝对不想错过的石涛五十幅国画作品!

家居要闻

本真栖居 爱暖伴流年

手机要闻

春节后影像机皇之争:OPPO Find X9 Ultra与vivo X300 Ultra规格曝光

旅游要闻

1 碗胡辣汤 1 幅糖画!曹魏古城的烟火气,才是过年该有的样

无障碍浏览 进入关怀版