Skip to main content

Integration of uv with tox.

Project description

tox-uv

PyPI version PyPI Supported Python Versions check Downloads

tox-uv is a tox plugin, which replaces virtualenv and pip with uv in your tox environments. Note that you will get both the benefits (performance) or downsides (bugs) of uv.

How to use

Install tox-uv into the environment of your tox, and it will replace virtualenv and pip for all runs:

uv tool install tox --with tox-uv # use uv to install
tox --version # validate you are using the installed tox
tox r -e py312 # will use uv

tox environment types provided

This package will provide the following new tox environments:

  • uv-venv-runner is the ID for the tox environments runner for environments not using a lock file.
  • uv-venv-lock-runner is the ID for the tox environments runner for environments using uv.lock (note we can’t detect the presence of the uv.lock file to enable this because that would break environments not using the lock file - such as your linter).
  • uv-venv-pep-517 is the ID for the PEP-517 packaging environment.
  • uv-venv-cmd-builder is the ID for the external cmd builder.

uv.lock support

If you want for a tox environment to use uv sync with a uv.lock file you need to change for that tox environment the runner to uv-venv-lock-runner. Furthermore, should in such environments you use the extras config to instruct uv to install the specified extras, for example:

[testenv:fix]
description = run code formatter and linter (auto-fix)
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 = run type checker via mypy
commands =
    mypy {posargs:src}

[testenv:dev]
runner = uv-venv-lock-runner
description = dev environment
extras =
    dev
    test
    type
commands =
    uv pip tree

In this example:

  • fix will use the uv-venv-runner and use uv pip install to install dependencies to the environment.
  • type will use the uv-venv-lock-runner and use uv sync to install dependencies to the environment without any extra group.
  • dev will use the uv-venv-lock-runner and use uv sync to install dependencies to the environment with the dev, test and type extra groups.

Note that when using uv-venv-lock-runner, all dependencies will come from the lock file, controlled by extras. Therefore, options like deps are ignored (and all others enumerated here as Python run flags).

extras

A list of string that selects, which extra groups you want to install with uv sync. By default, it is empty.

with_dev

A boolean flag to toggle installation of the uv development dependencies. By default, it is false.

External package support

Should tox be invoked with the --installpkg flag (the argument must be either a wheel or source distribution) the sync operation will run with --no-install-project and uv pip install will be used afterward to install the provided package.

Environment creation

We use uv venv to create virtual environments. This process can be configured with the following options:

uv_seed

This flag, set on a tox environment level, controls if the created virtual environment injects pip, setuptools and wheel into the created virtual environment or not. By default, it is off. You will need to set this if you have a project that uses the old legacy-editable mode, or your project doesn’t support the pyproject.toml powered isolated build model.

uv_python_preference

This flag, set on a tox environment level, controls how uv select the Python interpreter.

By default, uv will attempt to use Python versions found on the system and only download managed interpreters when necessary. However, It is possible to adjust uv's Python version selection preference with the python-preference option.

Package installation

We use uv pip to install packages into the virtual environment. The behavior of this can be configured via the following options:

uv_resolution

This flag, set on a tox environment level, informs uv of the desired resolution strategy:

  • highest - (default) selects the highest version of a package satisfying the constraints.
  • lowest - install the lowest compatible versions for all dependencies, both direct and transitive.
  • lowest-direct - opt for the lowest compatible versions for all direct dependencies, while using the latest compatible versions for all transitive dependencies.

This is an uv specific feature that may be used as an alternative to frozen constraints for test environments if the intention is to validate the lower bounds of your dependencies during test executions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tox_uv-1.13.1.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

tox_uv-1.13.1-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file tox_uv-1.13.1.tar.gz.

File metadata

  • Download URL: tox_uv-1.13.1.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for tox_uv-1.13.1.tar.gz
Algorithm Hash digest
SHA256 a8504b8db4bf6c81cba7cd3518851a3f1e0f6991d22272a4cc08ebe1b7f38cca
MD5 185cda3c7d846a0ab1a0a126e6e6a349
BLAKE2b-256 a8931f06c3cbfd4c1aa23859d49a76c7e65b51e60715bc22b2dd16cbff9c1e71

See more details on using hashes here.

Provenance

The following attestation bundles were made for tox_uv-1.13.1.tar.gz:

Publisher: GitHub
  • Repository: tox-dev/tox-uv
  • Workflow: release.yaml
Attestations:
  • Statement type: https://in-toto.io/Statement/v1
    • Predicate type: https://docs.pypi.org/attestations/publish/v1
    • Subject name: tox_uv-1.13.1.tar.gz
    • Subject digest: a8504b8db4bf6c81cba7cd3518851a3f1e0f6991d22272a4cc08ebe1b7f38cca
    • Transparency log index: 139176880
    • Transparency log integration time:

File details

Details for the file tox_uv-1.13.1-py3-none-any.whl.

File metadata

  • Download URL: tox_uv-1.13.1-py3-none-any.whl
  • Upload date:
  • Size: 13.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for tox_uv-1.13.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b163dd28ca37a9f4c6d8cbac11153be27c2e929b58bcae62e323ffa8f71c327d
MD5 1564535a7a372a4a1e45b89485fce4fb
BLAKE2b-256 b78e94afb25547f5e4987801e8f6aa11e357190f72f31eb363267a3cb2fa6a88

See more details on using hashes here.

Provenance

The following attestation bundles were made for tox_uv-1.13.1-py3-none-any.whl:

Publisher: GitHub
  • Repository: tox-dev/tox-uv
  • Workflow: release.yaml
Attestations:
  • Statement type: https://in-toto.io/Statement/v1
    • Predicate type: https://docs.pypi.org/attestations/publish/v1
    • Subject name: tox_uv-1.13.1-py3-none-any.whl
    • Subject digest: b163dd28ca37a9f4c6d8cbac11153be27c2e929b58bcae62e323ffa8f71c327d
    • Transparency log index: 139176882
    • Transparency log integration time:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page