Python Tox

news2024/11/19 1:54:59

tox其核心作用是支持创建隔离的 Python 环境,在里面可以安装不同版本的 Python 解释器与各种依赖库,以此方便开发者做自动化测试、打包、持续集成等事情。

简单来说,tox 是一个管理测试虚拟环境的命令行工具。

我介绍一种应用场景,我们现在有个工程,现在需要确保其在python3.8~python3.11版本下都能正常运行,那么使用tox进行测试,就会显得非常方便。

感兴趣的可以参考几个帖子:

百度安全验证

Python Tox介绍和使用_solinger的博客-CSDN博客

【Python】tox - 自动化和标准化测试_tox测试_dovsnier的博客-CSDN博客

ok,这里我介绍下,我们的一些具体使用。

其实,tox的主要内容,就是在于其tox.ini文件。

那么先看一个tox.ini文件:

[tox]
env_list = py38,py39,py310,py311
skip_missing_interpreters = true

[testenv]
deps = 
    p4python
    python-dateutil
    python-ldap
    pytz
setenv = 
    PYTHONPATH = {env:PYTHONPATH}

commands = 
    python3 tests/run_tests.py {posargs}

这里解释一下:

env_list:就是指,要管理的python解释器,都有哪些,这里采用的是模糊匹配的原则,基本上它的识别度还是跟高的。

skip_missing_interpreters:是说,如果本地没有匹配到相应的python解释器,那就跳过。

deps:指做测试的时候,需要依赖的第三方包。

setenv:指往往在linux中,会有个环境变量PYTHONPATH,我们可以给其赋值,在代码执行过程中,往往导包的时候,在其它地方无法导入的情况下,也会在PYTHONPATH提供的路径下去找包,那么按照上面的写法,就相当于将PYTHONPATH添加到了os.env中。

commands:就是要执行的测试命令,这个参数本身没什么要注意的,主要是在其末尾有个{posargs}参数,这个参数需要注意,这个参数的意思是,在执行tox命令的时候可以传参,而传入的参数,会如数传递到{posargs}。

ok,再看看,tox的具体命令:

tox -e py38 -r

其中 -e 参数:是指选择要运行的测试环境。

-r 参数:就是 run 么,这个参数可给可不给,最好给着。

另外就是需要注意,安装tox的时候,我们使用的命令是 pip install tox 但是,安装完成后,会发现,tox是有个可执行文件的,我们需要将可执行文件添加到环境路径里去,否则,在执行tox命令的过程中,会出现找不到tox的报错。这里windows的添加环境路径和mac,linux略有不同。

首先需要明确,tox是不挑对象的,就是说,不管是python3.8对应的tox版本,还是python3.10对应的对象,都可以直接用,都可以去管理其他python版本的虚拟环境的。

然后,看下,我是在windows下下载的python3.8的tox,那么就应该这样添加环境路径:

先找到tox的可执行文件。

 在将tox可执行文件添加到环境路径中就可以了。

 

linux和mac的添加方法一致:

再看一下tox:

 这就是个可执行文件,我们执行tox命令,就是在执行这里的这个tox可执行文件。

所以,它确实不分python版本。

然后,需要将这个目录添加到PATH里:export PATH=$PATH:/home/your_name/.local/bin

然后就可以正常使用tox了。

当然,在执行tox的时候,注意一下,就是当前目录下得有tox.ini文件,这个,没有的话会报错,就是说,没找到tox.ini文件,然后,重新换个有tox.ini文件的地方去执行tox命令就可以了啊。

上面介绍了一个没有tox传参式的命令,另外,再看个有传参的tox用法。

tox -e py310 -r -- --ssh-hostname 10.12.15.181 --ssh-password 123456 --ssh-username my_name

基本上大同小异。但是有个地方,需要注意,就是在 -r 后面,有个 -- 这个东西,这个东西算是一个标识符,其标志在其之后的内容,为参数内容,是要传给tox.ini文件中的{posargs}的。

再看个例子:

这是 tox.ini 文件:

[tox]
env_list = py38,
           py39,
           py310,
           py311
skip_missing_interpreters = True

[testenv]
deps = pyVim
       pyVmomi
       pytest
       pytz
       requests
       PyYAML
       progressbar2
       python-dateutil
       mock
setenv = PYTHONPATH = {env: PYTHONPATH}
commands = pytest tests/

这是执行命令:tox -e py38 -r

这是执行结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Jetpack Compose中设置渐变背景

如何在Jetpack Compose中设置渐变背景 只需几步即可通过平滑渐变增强应用程序的用户界面 虽然它经常出现在网络前端的世界中,但渐变背景可以为您的移动应用程序增添专业和美观的触感,使其对您的用户更具吸引力。 第 1 步:创建渐变画笔 为…

Semantic Segmentation using Adversarial Networks

首次将GAN用于语义分割,用于辨别分割图是来自GT还是来自分割网络。作者的想法来自借助GAN可以检测和矫正GT和模型分割图的高阶不一致。最后在Standford和PASCAL VOC 数据集上验证了想法。 对抗学习: 使用两个权重和的混合损失函数进行优化,第…

从win7升级到win10过程中遇到的问题:安装工具无法运行、卸载VMware

目录 1. 概述2. 微软官方安装工具无法运行3. 控制面板的卸载程序里面找不到VMware4. 输入产品密钥5. 安装完后仍然未激活6. 雨林木风 1. 概述 因为新电脑还没有到,把上学时候的笔记本翻出来顶一顶。旧笔记本还是win7,我的鼠标没办法使用,干脆…

HDCTF web复现

[HDCTF 2023]SearchMaster 传data 使用{if}标签闭合达到命令执行的效果 {if phpinfo()}{/if} NSSCTF{f578f8ba-246e-452b-b070-22bc4fc4313d} Smarty模板注入&CVE-2017-1000480 - 先知社区 (aliyun.com) [HDCTF 2023]YamiYami 非预期解 第一个连接 跳转到百度&#xf…

远程访问(内网穿透)

文章目录 介绍cpolar安装使用终端访问远程桌面访问 仅靠ssh,等只能实现同局域网下的服务器访问,本文介绍使用cpolar内网穿透工具实现非同局域网下的访问 介绍 远程:1804 ubuntu 软件依赖:ssh,xrdp, cpolar…

【K8s】资源管理与实战入门

文章目录 一、资源管理1、资源管理介绍2、YAML语言语法3、资源管理方式4、命令式对象管理--kubectl5、命令式对象配置6、声明式对象配置7、报错 二、实战入门1、namespace2、Pod3、Label4、deployment5、Service 一、资源管理 1、资源管理介绍 在kubernetes中,所有…

如何有效的向 AI 提问 ?

文章目录 〇、导言一、Base LLM 与 Instruction Tuned LLM二、如何提出有效的问题 ?1. 明确问题:2. 简明扼要:3. 避免二义性:4. 避免绝对化的问题:5. 利用引导词:6. 检查语法和拼写:7. 追问细节…

7天获邀请函|环境科学研究学者持加拿大麦吉尔大学Offer申报CSC

I老师要求2周内获得邀请函且指定加拿大。我们只用了7天时间就获得加拿大排名榜首的麦吉尔大学邀请函,整整提前了一半时间,效率奇高。 I老师背景: 申请类型:CSC访问学者 工作背景:某研究所研究人员 教育背景&#xf…

g++编译静态库与动态库

该文目的是基本理清一个在linux在c静态库与动态库的编译和使用 一个非常基础的一节,简单的整合了一下目前已有的文章 前提准备: 文件: touch SoDemoTest.h one.cpp two.cpp three.cpp main.cpp代码 /* SoDemoTest.h */ #ifndef _SO_DEMO_TEST_HEADE…

【Ubuntu22.04】内网部署Ubuntu Server 22.04.2

镜像下载 方式一:官网下载 https://ubuntu.com/download/server 方式二:清华镜像站 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04.2/ 方式三:百度网盘 链接: https://pan.baidu.com/s/1g24PDfAiPVsxMm7DVpERdg?pwd1020 …

myql的三种删除方式:delete truncate drop

前言 在 MySQL 中,删除的方法总共有 3 种:delete、truncate、drop,而三者的用法和使用场景又完全不同,接下来我们具体来看。 1.delete detele 可用于删除表的部分或所有数据,它的使用语法如下: delete …

独立产品灵感周刊 DecoHack #052 - 100个AI 工具导航网站

本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,往期内容同样精彩,感兴趣的伙伴可以 点击订阅我的周刊。为保证每期都能收到,建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。 ❤️ 刚换工作再加上个人原因有些自己的事…

消息队列中间件 - 详解RabbitMQ6种模式

RabbitMQ 6种工作模式 对RabbitMQ 6种工作模式(简单模式、工作模式、订阅模式、路由模式、主题模式、RPC模式)进行场景和参数进行讲解,PHP代码作为实例。 安装 客户端实现:添加扩展,执行composer.phar install命令 {"require":…

SSM框架学习-bean实例化

实例化bean的三种方式 1. 构造方法(常用) Spring创建bean调用的是无参的构造方法,且无论该无参构造方法是公有还是私有的,都可以调用(底层实现原理为反射) 2. 静态工厂(了解) 要配置…

【论文阅读-Low-code LLM】使用LLM进行可视化编程

Low-code LLM: Visual Programming over LLMs link: https://arxiv.org/abs/2304.08103 repository: https://github.com/microsoft/TaskMatrix/tree/main/LowCodeLLM 摘要 大规模预训练模型(LLMs)在解决困难问题仍具有很大的挑战。这篇文章提出了可以…

lua | 数据类型与变量

目录 一、数据类型 8个基本类型 1.nil(空) 2.boolean(布尔) 3.number(数字) 4.string(字符串) 5.table(表 ) 6.function(函数) 7.thread(线程) 8.u…

FIR滤波

参考来源: https://www.zhihu.com/question/323353814 本节主要围绕以下几个问题进行描述: 什么是FIR滤波器时域的卷积频域的相乘 关于FIR FIR滤波就是在时域上卷积的过程。将含噪声信号与低通滤波器的傅里叶逆变换值进行卷积,这个过程就是…

29 - 打家劫舍问题

文章目录 1. 打家劫舍I2. 打家劫舍II3. 打家劫舍III(1) 暴力递归超时(2) 记忆化搜索超时(3) 动态规划 1. 打家劫舍I 动态规划&#xff1a; dp[i] max(dp[i - 2] nums[i], dp[i - 1]); class Solution { public:int rob(vector<int>& nums) {if(nums.size() 1) re…

密码学:分组密码.(块密码:是一种对称密码算法)

密码学&#xff1a;分组密码. 分组加密(Block Cipher) 又称为分块加密或块密码&#xff0c;是一种对称密码算法&#xff0c;这类算法将明文分成多个等长的块 (Block) &#xff0c;使用确定的算法和对称密钥对每组分别加密或解密。分组加密是极其重要的加密体制&#xff0c;如D…

CE游戏特例说明

1.CE修改游戏特例说明 模拟器游戏不能直接修改游戏的程序代码&#xff08;即不能直接使用代码注入的手段修改code段代码&#xff09;&#xff0c;因为游戏并非使用平台语言所写&#xff0c;只有模拟器是使用平台语言写的&#xff0c;即壳是汇编写的&#xff0c;壳用来翻译跨平台…