Python Tox 使用笔记
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
这里只是做了一个简单的从pyMN
到pythonM.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}
下新建两个文件hello1
和hello2
,然后运行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 使用笔记相关推荐
- python做直方图-python OpenCV学习笔记实现二维直方图
本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...
- Python中知识点笔记
Python中知识点笔记 Wentao Sun. Nov.14, 2008 来这个公司11个月了,最开始来的一个笔记本用完了,里面都是工作时记录的一些片段,看到一块自己当时学/写 python程序时记 ...
- python 队列 一次取多个_Queue 队列模块-Python成为专业人士笔记
"专业人士笔记"系列目录: 创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!zhuanlan.zhihu.com 介绍 队列模块能实现多生产者.多消费者的队列 ...
- python 慕课课程笔记(一)
python 慕课课程笔记 1.python 是动态语言,而 java 是静态语言.动态语言变量本身的类型时不固定的,而静态语言在变量定义时就必须指定变量的类别. 2. 在python 代码中书写 a ...
- python 正则学习笔记
python 正则学习笔记 官方document #1.0 import re m=re.search('(?<=abc)def','cxabcdefgb')print(m.group(0))# ...
- 【Tools】python环境操作笔记
python环境操作笔记 1.安装Python虚拟环境 2.python pip 添加清华镜像 3.Ubuntu卸载python后出现系统崩溃以及各种问题的解决方法 4.Python下关于 tkint ...
- python笔记视频_终于拿到!清华大佬Python视频+书+笔记汇总
终于拿到!清华大佬Python视频+书+笔记汇总 清华学姐推荐的Python视频400集,拿走不谢!
- Python 三维可视化笔记1 -- TVTK库
Python 三维可视化笔记1 – TVTK库 Python 三维可视化系列笔记是笔者在学习黄天羽老师的<Python科学计算三维可视化>课程及笔者实践三维可视化的笔记. 课程链接: Py ...
- Python 网络爬虫笔记11 -- Scrapy 实战
Python 网络爬虫笔记11 – Scrapy 实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...
- Python 网络爬虫笔记10 -- Scrapy 使用入门
Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...
最新文章
- Python的设计定位
- mysql是否有缓存区_Mysql查询高速缓存区
- 读书笔记_CLR.via.c#第五章_基元类型_引用类型_值类型
- HP_UX常用指令列表(转,整理过,方便使用)
- UNIX(进程间通信):03---僵尸进程
- 3-35Pytorch与visdom
- 携程:2021国庆高星酒店均价945元 环比节前一周提升超80%
- java 代码转换_java字符编码转换过程(转)
- 是运用计算机科学的基础知识进行问题求解,计算机基础-第一章计算机基础知识.ppt...
- 计算机专业的英文简历范文带翻译,英文个人简历带翻译【英文简历范文带翻译】...
- python 画图十大工具_python实现画图工具
- 我“药水哥”硬气了 改行‘程序员’了
- 笔记本外接显示器没有声音
- zblog技术导航网全站源码+数据
- ORA-01439: 要更改数据类型, 则要修改的列必须为空
- 【钉钉-场景化能力包】e签宝提供的电子签名能力
- OC中调用Swift代码方法
- oracle tcp.validnode_checking,使用tcp.validnode_checking允许、限制机器访问数据库
- Errorcode? Thread1: EXC_BAD_ACCESS (code=EXCi386_GPFLT)
- [CF3B]Lorry
热门文章
- 【Origin】1.2 创建数据文件——Worksheet操作(1)
- sonar代码审查问题分析
- B站增量数据湖探索与实践
- 这交互炸了(三):闪屏页是像云一样消失的
- “苏宁SAP上线“有感(原)
- PreparedStatement.addbatch()的使用
- python3,烤地瓜案例
- WAMP安装与基础配置
- 单片机继电器控制实验程序C语言,用单片机通过继电器来控制电热水器的实验...
- linux unlink函数作用,unlink函数的作用