Skip to main content

A tool for managing virtualenvs via a declarative config file

Project description

PyPI version Build status

venvs is a tool for configuring, in a single file, a set of virtualenvs, which packages to install into each, and any binaries to make globally available from within.

It is a thin layer on top of uv, adding a declarative configuration format.

Installation

uv tool install venvs

uv must be installed and on your PATH.

Configuration

Create a file at ~/.local/share/virtualenvs/virtualenvs.toml (or wherever $WORKON_HOME points). Here’s an example:

[virtualenv.development]
install = [
    "pudb",
    "twisted",
]
link = ["trial"]

[virtualenv.app]
install = ["flask"]
python = "python3.12"
link = ["flask:flask-app"]

[virtualenv.tools]
install = ["ipython"]
link-module = ["IPython:ipy"]

Running venvs converge will create each virtualenv, install the specified packages, and symlink the named binaries into ~/.local/bin/.

Config Reference

Each [virtualenv.<name>] section supports:

install

List of packages to install (supports $ENV_VAR and ~/ expansion).

requirements

List of requirements files to install from.

python

Python interpreter to use (default: python3).

install-bundle

List of bundle names to include (see below).

link

List of binaries to symlink into the link directory. Use "source:target" to rename, e.g. "black:black3.12".

link-module

List of modules to make available as wrapper scripts that run python -m <module>. Use "module:name" to rename.

post-commands

List of commands (as arrays) to run after converging, e.g. [["touch", "/tmp/done"]].

Bundles

Bundles are reusable package groups:

[bundle]
dev = ["pytest", "ruff", "mypy"]

[virtualenv.myproject]
install = ["mypackage"]
install-bundle = ["dev"]

Usage

venvs converge

Converge the configured set of virtualenvs:

$ venvs converge

Specific virtualenvs can be targeted:

$ venvs converge myproject tools

Options:

--fail-fast

Stop on the first failure (default: continue and report errors at the end).

--link-dir <path>

Directory to symlink binaries into (default: ~/.local/bin).

--root <path>

Root directory for virtualenvs (default: platform-specific, or $WORKON_HOME).

Converge is idempotent – if the configuration and Python version haven’t changed and the virtualenv is healthy, it is skipped. Virtualenvs that are no longer in the configuration are automatically removed along with their symlinks. Broken virtualenvs (e.g. from a deleted Python installation) are automatically recreated.

Virtualenvs are converged in parallel.

venvs find

Find virtualenv paths:

$ venvs find                    # print the root directory
$ venvs find name myproject     # print the virtualenv path
$ venvs find name myproject python  # print path to a binary

Releasing

Releases are managed via cargo-release:

$ cargo release 2026.5.1

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

venvs-2026.5.1.tar.gz (28.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

venvs-2026.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (833.2 kB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

venvs-2026.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (839.0 kB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

venvs-2026.5.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (899.5 kB view details)

Uploaded Python 3manylinux: glibc 2.5+ x86-64

venvs-2026.5.1-py3-none-macosx_11_0_arm64.whl (768.9 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

venvs-2026.5.1-py3-none-macosx_10_12_x86_64.whl (799.9 kB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file venvs-2026.5.1.tar.gz.

File metadata

  • Download URL: venvs-2026.5.1.tar.gz
  • Upload date:
  • Size: 28.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for venvs-2026.5.1.tar.gz
Algorithm Hash digest
SHA256 37030b6cbb343598a1b3e9e97ab03c06f53a9216e8ca13edc4996ae5d56bd226
MD5 a853bd3a550ac4bbf58341c01e1b0aa5
BLAKE2b-256 8bd2bfb3b2fb563082f3df1201355342b67cc3cee59a29d336910faf63a6af4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for venvs-2026.5.1.tar.gz:

Publisher: ci.yml on Julian/venvs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file venvs-2026.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for venvs-2026.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb7b7ec67b655a44097eae58e7a894b223f062ce899273647bc3d043d6b36b01
MD5 0141140dcb1bce29adf3ebd11e3ca8e0
BLAKE2b-256 f49c8a1affdc4f471c05a5a17ae75fec2bc7c72580b2a91ebfbf829e10bc1210

See more details on using hashes here.

Provenance

The following attestation bundles were made for venvs-2026.5.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on Julian/venvs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file venvs-2026.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for venvs-2026.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 af72b5c395ddae240566d53932370bbd6e8af25584cf764be26ff5b5e2701ba4
MD5 722fb8d8e83c31d2a5cf86aedc00e0e9
BLAKE2b-256 b851f89053676216118a9b3ba38eff0216a76fc14627804523b9fbdd48309353

See more details on using hashes here.

Provenance

The following attestation bundles were made for venvs-2026.5.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on Julian/venvs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file venvs-2026.5.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for venvs-2026.5.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 861d8052c9ae67d94e5edba3d5a1818be85911f3f6169b6352f73b55d8365b68
MD5 a8ea9ebcec8e97e7a9cf026e4e3932b7
BLAKE2b-256 59bfb8024b91215618dceb715a3935f0224dfceadc588b3cc94c91bd3a757e1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for venvs-2026.5.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl:

Publisher: ci.yml on Julian/venvs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file venvs-2026.5.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for venvs-2026.5.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 837a62c7a1a48fa4622a933fc39ee9707e4aee2e4a2ec01a027a85b02f912072
MD5 4e5a2e166626272bbfc5e99d1f02614f
BLAKE2b-256 54dc867b8c0a38be6c8e8344e012cbc3f42c589c3f5192e9056945e580dd7c1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for venvs-2026.5.1-py3-none-macosx_11_0_arm64.whl:

Publisher: ci.yml on Julian/venvs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file venvs-2026.5.1-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for venvs-2026.5.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 07812bbfa93755db11eacc20d8a59bd99a8ab2f0556876b7e5545aff34dc2737
MD5 caa9c613eb88c725201b9c3326a3f71b
BLAKE2b-256 549b953ab42c7e7f199c39906c4df105ebfc543d085fd9cf8eb85d046a09b633

See more details on using hashes here.

Provenance

The following attestation bundles were made for venvs-2026.5.1-py3-none-macosx_10_12_x86_64.whl:

Publisher: ci.yml on Julian/venvs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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