在Python开发中,测试环境的搭建是一个不可或缺的环节。传统的虚拟环境管理工具如virtualenv和pip虽然功能强大,但在某些场景下可能存在性能瓶颈。为了解决这一问题,tox-uv应运而生,它是一个tox插件,旨在用uv工具替代virtualenv和pip,以提升测试环境搭建的性能。
Tox-uv简介
tox-uv是一个创新的tox插件,它通过使用uv工具来创建和管理虚拟环境,从而提高了Python项目的测试效率。uv是一个高效的包管理器,它在安装包时不需要依赖于系统级的pip,因此可以更快地完成依赖的安装和环境的搭建。
如何使用Tox-uv
要使用tox-uv,首先需要在你的tox环境中安装它。安装完成后,tox-uv将自动替换virtualenv和pip,用于后续的所有运行:
bash
uv tool install tox --with tox-uv # 使用uv安装tox
tox --version # 验证是否使用了安装的tox
tox r -e py312 # 将使用uv
tox --runner virtualenv r -e py312 # 将使用virtualenv+pip
Tox环境类型
Tox-uv提供了几种新的tox环境类型,以适应不同的测试需求:
uv-venv-runner
:这是不使用锁文件的tox环境运行器的ID。uv-venv-lock-runner
:这是使用uv.lock的tox环境运行器的ID。uv-venv-pep-517
:这是PEP-517打包环境的ID。uv-venv-cmd-builder
:这是外部cmd构建器的ID。
uv.lock支持
如果你希望tox环境使用uv与uv.lock文件同步,你需要为该tox环境更改运行器为uv-venv-lock-runner
。此外,在这些环境中,如果你使用extras
配置来指示uv安装指定的额外包,例如:
[testenv:fix]
description = 运行代码格式化程序和linter(自动修复)
skip_install = true
deps =
pre-commit-uv>=4.1.1
commands =
pre-commit run --all-files --show-diff-on-failure
[testenv:type]
runner = uv-venv-lock-runner
description = 通过mypy运行类型检查器
commands =
mypy {posargs:src}
[testenv:dev]
runner = uv-venv-lock-runner
description = 开发环境
extras =
dev
test
type
commands =
uv pip tree
在这个示例中:
fix
将使用uv-venv-runner
并使用uv pip install
安装依赖到环境中。type
将使用uv-venv-lock-runner
并使用uv sync
安装依赖到环境中,不包含任何额外的组。dev
将使用uv-venv-lock-runner
并使用uv sync
安装依赖到环境中,包括dev
、test
和type
额外的组。
请注意,当使用uv-venv-lock-runner
时,所有依赖项都将来自锁文件,由extras
控制。因此,deps
等选项将被忽略。
额外的配置选项
Tox-uv还提供了一些额外的配置选项,以进一步定制你的测试环境:
extras
:一个字符串列表,用于选择你想要与uv sync一起安装的额外组。默认为空。with_dev
:一个布尔标志,用于切换是否安装uv开发依赖项。默认为false。uv_sync_flags
:一个字符串列表,包含传递给uv sync的额外标志。例如,如果你想以非可编辑模式安装包并保留安装在环境中的额外包,可以这样做:
uv_sync_flags = --no-editable, --inexact
外部包支持
如果tox被调用时带有--installpkg
标志(参数必须是wheel或源码分发),同步操作将使用--no-install-project
运行,之后将使用uv pip install
来安装提供的包。
环境创建
我们使用uv venv
来创建虚拟环境。这个过程可以通过以下选项进行配置:
uv_seed
:这个标志设置在tox环境级别,控制创建的虚拟环境是否注入pip、setuptools和wheel。默认为关闭。如果你的项目使用旧的legacy-editable模式,或者你的项目不支持由pyproject.toml驱动的隔离构建模型,你需要设置这个选项。uv_python_preference
:这个标志设置在tox环境级别,控制uv如何选择Python解释器。
默认情况下,uv会尝试使用系统上找到的Python版本,只有在必要时才会下载托管的解释器。然而,你可以使用python-preference
选项调整uv的Python版本选择偏好。
包安装
我们使用uv pip
将包安装到虚拟环境中。这种行为可以通过以下选项进行配置:
-
uv_resolution
:这个标志设置在tox环境级别,通知uv所需的解析策略:highest
:(默认)选择满足约束条件的包的最高版本。lowest
:安装所有依赖项(包括直接和间接)的最低兼容版本。lowest-direct
:选择所有直接依赖项的最低兼容版本,同时使用所有间接依赖项的最新兼容版本。
这是一个uv特有的功能,如果测试执行期间的目的是验证你的依赖项的下限,它可以作为冻结约束的替代品。
结语
Tox-uv的出现,为Python测试环境的搭建提供了新的选择。通过使用uv工具,它不仅提高了性能,还简化了环境管理的复杂性。对于追求高效开发流程的Python开发者来说,tox-uv无疑是一个值得尝试的工具。随着Python生态的不断发展,我们期待tox-uv能够带来更多的创新和改进。
标签:Tox,venv,Python,lock,uv,tox,runner,使用 From: https://blog.csdn.net/u013818406/article/details/143292422