Tox是一个项目自动化工具,在此记录下没在文档和网上tutorial找到的使用细节。试验中尽可能使用最小tox.ini。本文使用tox --showconfig -- <args...>的形式观察配置结果。如果文中没有提<args...>是什么(例如直接说“配置结果为”,而不是“运行…后配置结果为“),那么运行的是tox --showconfig

默认basepython

情况一

tox.ini为空。此时只有一个匿名虚拟环境。

配置结果为:

...[testenv:python]
...
basepython = /Library/Frameworks/Python.framework/Versions/3.9/bin/python3
...

这里的/Library/Frameworks/Python.framework/Versions/3.9/bin/python3是本机上按PATH顺序第一个遇到的Python解释器(注意这里既不是第一个python也不是第一个python3)。另外可以观察到,匿名虚拟环境被命名为python

情况二

tox.ini

[testenv:x]

此时只有一个名为x的虚拟环境,x不与文档中的任何一种特殊命名匹配。配置结果为

...[testenv:x]
...
basepython = /Library/Frameworks/Python.framework/Versions/3.9/bin/python3
...

可见与情况一相同。

情况三

tox.ini

[testenv:py28]

此时只有一个名为py28的虚拟环境。配置结果为

...[testenv:py28]
...
basepython = python2.8
...

我们知道是没有python2.8的,可见tox这里只是做了一个简单的从pyMNpythonM.N的映射。此时如果运行tox的话是要报错的(即使tox.ini里加上skipsdist = true也会报错):ERROR: InterpreterNotFound: python2.8

情况四

tox.ini

[testenv:py28]
basepython = python2.7

与情况三相同,但显式指定了basepython。配置结果为

...[testenv:py28]
...
basepython = python2.7
...

可见显式指定的basepython生效了。

{posargs}展开

情况一

tox.ini

[testenv]
commands = {posargs}

运行tox --showconfig后(无参数),配置结果为

...
commands = [[]]
...

可见{posargs}在无参数时展开为空字符串。

运行tox --showconfig -- hello world后(带参数),配置结果为

...
commands = [['hello', 'world']]
...

{toxinidir}下新建两个文件hello1hello2,然后运行tox --showconfig -- hello*后(注意这里的运行环境不是Windows),配置结果为

...
commands = [['hello1', 'hello2']]
...

这是符合期望的,因为Shell在传参前先做了Globbing,然而如果运行tox --showconfig -- "hello*"后,配置结果为

...
commands = [['hello*']]
...

可见{posargs}不会做Globbing。

举一个运行tox的例子。令tox.ini

[tox]
skipsdist = true[testenv]
allowlist_externals = ls
commands = ls {posargs}

如果运行tox -- "hello*",我们会得到结果

python run-test-pre: PYTHONHASHSEED='2558120981'
python run-test: commands[0] | ls 'hello*'
ls: hello*: No such file or directory
ERROR: InvocationError for command /bin/ls 'hello*' (exited with code 1)
_________________________ summary __________________________
ERROR:   python: commands failed

情况二

tox.ini

[testenv]
commands = "{posargs}"

注意{posargs}两边的引号。运行tox --showconfig后(无参数),配置结果为

...
commands = [['']]
...

可见虽然{posargs}在无参数时展开为空字符串,但现在有引号,导致仍产生了一个参数,只不过该参数值为空。

运行tox --showconfig -- hello后(一个参数),配置结果为

...
commands = [['hello']]
...

没什么值得惊讶的。

运行tox --showconfig -- hello world后(多参数),配置结果为

...
commands = [['hello world']]
...

可见虽然{posargs}展开成了两个参数,但是引号又重新把它们括成了一个参数。

Python Tox 使用笔记相关推荐

  1. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

  2. Python中知识点笔记

    Python中知识点笔记 Wentao Sun. Nov.14, 2008 来这个公司11个月了,最开始来的一个笔记本用完了,里面都是工作时记录的一些片段,看到一块自己当时学/写 python程序时记 ...

  3. python 队列 一次取多个_Queue 队列模块-Python成为专业人士笔记

    "专业人士笔记"系列目录: 创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.zhihu.com 介绍 队列模块能实现多生产者.多消费者的队列 ...

  4. python 慕课课程笔记(一)

    python 慕课课程笔记 1.python 是动态语言,而 java 是静态语言.动态语言变量本身的类型时不固定的,而静态语言在变量定义时就必须指定变量的类别. 2. 在python 代码中书写 a ...

  5. python 正则学习笔记

    python 正则学习笔记 官方document #1.0 import re m=re.search('(?<=abc)def','cxabcdefgb')print(m.group(0))# ...

  6. 【Tools】python环境操作笔记

    python环境操作笔记 1.安装Python虚拟环境 2.python pip 添加清华镜像 3.Ubuntu卸载python后出现系统崩溃以及各种问题的解决方法 4.Python下关于 tkint ...

  7. python笔记视频_终于拿到!清华大佬Python视频+书+笔记汇总

    终于拿到!清华大佬Python视频+书+笔记汇总 清华学姐推荐的Python视频400集,拿走不谢!

  8. Python 三维可视化笔记1 -- TVTK库

    Python 三维可视化笔记1 – TVTK库 Python 三维可视化系列笔记是笔者在学习黄天羽老师的<Python科学计算三维可视化>课程及笔者实践三维可视化的笔记. 课程链接: Py ...

  9. Python 网络爬虫笔记11 -- Scrapy 实战

    Python 网络爬虫笔记11 – Scrapy 实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...

  10. Python 网络爬虫笔记10 -- Scrapy 使用入门

    Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...

最新文章

  1. 大数据是怎么知道你去过新发地的?
  2. Linux下远程访问mysql数据库
  3. python 类-Python的类
  4. linux如何扩展根分区,linux扩展根分区详细步骤
  5. 【快速通关】Git快速上手gitee
  6. 组合数据类型综合练习
  7. python获取文件字节数_python关于文件操作中的字符个数和字节数
  8. 卖萌屋原创专辑首发,算法镇魂三部曲!
  9. 掌握 Linux 调试技术
  10. java中priorityqueue_详解JAVA中priorityqueue的具体使用
  11. 作业 3 应用分支与循环结构解决问题
  12. EasyRTMP实现对接海康、大华等IPCamera SDK进行RTMP推送直播功能
  13. 容器技术Docker K8s 32 容器服务ACK基础与进阶-弹性伸缩
  14. 优炫数据库收到来自重庆市统计局的感谢信
  15. BIM应用落地:基于BIM的群塔作业方案优化
  16. 如何实现异地远程登录计算机,两台异地电脑怎么实现远程控制
  17. BLE蓝牙的连接和配对过程
  18. 【Unity】基础游戏单位GameObject中常用的属性和API
  19. android获取手机IMSI号
  20. mysql主键设置了递增,插入语句的写法

热门文章

  1. Gradle配置及同一应用不同版本配置不同资源文件,不同签名,包名进行打包
  2. html新浪短域名api,新浪(t.cn)短网址API-API文档-免费api接口-短网址工具
  3. python通过鼠标点击进行图像截图,类似QQ截图
  4. 远程计算机显卡,微软远程桌面连接(RDP)优化方案-显卡加速-提升帧率-挂载U盘...
  5. 光线cms,如何增加像百度一样的智能提示
  6. 3dmax的学习技巧大全
  7. manjaro 更新失败
  8. 压缩视频 HandBrake软件
  9. [论文阅读笔记38]基于多标准主动学习EMR实体识别方法
  10. win10系统点击菜单没有反应