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

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.

相关推荐
热点推荐
中央军委办公厅最新署名文章

中央军委办公厅最新署名文章

政知新媒体
2026-10-01 08:11:56
事态已经全面升级!赖清德有可能成为新中国历史上,唯一一位在任台湾地区领导人中出现重大变故的人物

事态已经全面升级!赖清德有可能成为新中国历史上,唯一一位在任台湾地区领导人中出现重大变故的人物

人生录
2026-09-11 00:05:21
浙江2岁娃吃银鳕鱼汞中毒!盒马银鳕鱼并非鳕鱼,厂商称“儿童装”不是婴幼儿专用

浙江2岁娃吃银鳕鱼汞中毒!盒马银鳕鱼并非鳕鱼,厂商称“儿童装”不是婴幼儿专用

听心堂
2026-09-29 08:51:43
“用户日增速10%”!23岁天才辍学生造出Meta Muse最大劲敌,14人团队撑起671亿估值

“用户日增速10%”!23岁天才辍学生造出Meta Muse最大劲敌,14人团队撑起671亿估值

华尔街见闻官方
2026-09-29 09:50:05
白白嫩嫩好身材的我,你会喜欢吗?

白白嫩嫩好身材的我,你会喜欢吗?

疾跑的小蜗牛
2026-09-30 21:12:00
香烟再次成为关注对象!多名院士发现:糖尿病常抽烟,有5变化

香烟再次成为关注对象!多名院士发现:糖尿病常抽烟,有5变化

叙说医疗健康
2026-10-01 10:00:37
16岁天才少年被清北保送后跳崖,遗言让人痛彻心扉:愿不再有来生

16岁天才少年被清北保送后跳崖,遗言让人痛彻心扉:愿不再有来生

悬案解密档案
2025-07-18 16:15:01
美联储降息难救中国楼市?高盛:房价真正底部在2027年

美联储降息难救中国楼市?高盛:房价真正底部在2027年

魏家东
2026-09-30 18:05:21
河南一家庭迎来“双胞胎国庆宝宝”,四千多名网友在线帮忙取名,父亲:中间字准备用“国”,第三个字还没想好,会借鉴网友智慧

河南一家庭迎来“双胞胎国庆宝宝”,四千多名网友在线帮忙取名,父亲:中间字准备用“国”,第三个字还没想好,会借鉴网友智慧

极目新闻
2026-10-01 13:00:34
假日不再是行政人员专属福利!协和湘雅等多家大医院官宣停诊:最多的停诊6天半

假日不再是行政人员专属福利!协和湘雅等多家大医院官宣停诊:最多的停诊6天半

金水路7号站
2026-10-01 08:19:36
央国企摸底55岁在岗职工,内退重新启动,和过去老模式差别很大

央国企摸底55岁在岗职工,内退重新启动,和过去老模式差别很大

细说职场
2026-10-01 10:25:03
Windows 11 26H2正式推送:任务栏终于能放四边,微软这次听劝了

Windows 11 26H2正式推送:任务栏终于能放四边,微软这次听劝了

小8说科技
2026-09-30 13:10:47
女子突然刷到丈夫结婚照?她懵了:男的是我老公,这女的是谁??

女子突然刷到丈夫结婚照?她懵了:男的是我老公,这女的是谁??

英国那些事儿
2026-09-30 00:56:39
85克拉国产巨钻刚问世,俄罗斯一纸禁令封杀:河南钻不配叫钻石

85克拉国产巨钻刚问世,俄罗斯一纸禁令封杀:河南钻不配叫钻石

匹夫来搞笑
2026-10-01 13:30:37
胡斌 已卸任吉林省吉林市委书记

胡斌 已卸任吉林省吉林市委书记

长春新风采
2026-10-01 12:29:00
052D全副武装抵俄罗斯,防范乌军攻击?舰上反无人机系统严阵以待

052D全副武装抵俄罗斯,防范乌军攻击?舰上反无人机系统严阵以待

聚焦真实瞬间
2026-09-29 20:43:15
詹姆斯退役后,谁能成为他的名人堂引荐人?满打满算就4人够资格

詹姆斯退役后,谁能成为他的名人堂引荐人?满打满算就4人够资格

篮球圈里的那些事
2026-10-01 13:16:48
U盘坏了不要扔,电脑上输入2个简单命令,轻松救活U盘

U盘坏了不要扔,电脑上输入2个简单命令,轻松救活U盘

小柱解说游戏
2026-09-29 08:58:28
越南领导人被特朗普冷落后,回国第一件事,立即派人北上中方

越南领导人被特朗普冷落后,回国第一件事,立即派人北上中方

军机Nova
2026-10-01 00:19:56
属狗人:这辈子,千万别和这个人断了联系,他是你晚年的福气

属狗人:这辈子,千万别和这个人断了联系,他是你晚年的福气

牛锅巴小钒
2026-09-30 02:17:20
2026-10-01 14:48:49
Python猫 incentive-icons
Python猫
人生苦短,我用Python。博客:https://pythoncat.top
757文章数 8122关注度
往期回顾 全部

科技要闻

华为Mate90系列发布,售价5999元起

头条要闻

以乘客讲述惊魂一刻:我用耳机线捆住袭击者 他很安静

头条要闻

以乘客讲述惊魂一刻:我用耳机线捆住袭击者 他很安静

体育要闻

30天30队·火箭:乌度卡的控制欲

娱乐要闻

宋佳二封金鹰视后 内娱奖项史即将改写

财经要闻

智谱发上亿Token 能挽回开发者信任吗?

汽车要闻

燃油车的最佳平替 长城大狗HEV简单好开更经济

态度原创

亲子
手机
本地
房产
军事航空

亲子要闻

爸爸一定要多带带儿子,搞好关系 这样到老不孤单

手机要闻

华为Mate90起售价5999元起 一家四口手握四代华为 门店选机直呼真香

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

房产要闻

4000+/平!华侨城,直接把海口楼市的地板给掀了!

军事要闻

美防长宣布组建“自主作战司令部”

无障碍浏览 进入关怀版