Skip to main content

Use layered Python virtual environment stacks to share large dependencies

Project description

Virtual Environment Stacks for Python

The venvstacks project uses Python's sitecustomize.py environment setup feature to chain together three layers of Python virtual environments:

  • "Runtime" layers: environment containing the desired version of a specific Python runtime
  • "Framework" layers: environments containing desired versions of key Python frameworks
  • "Application" layers: environments containing components to be launched directly

Application layer environments may include additional unpackaged Python launch modules or packages for invocation with python's -m switch.

While the layers are archived and published separately, their dependency locking is integrated, allowing the application layers to share dependencies installed in the framework layers, and the framework layers to share dependencies installed in the runtime layers.

Refer to the Project Overview for an example of specifying, locking, building, and publishing a set of environment stacks.

Installing

venvstacks is available from the Python Package Index, and can be installed with pipx:

$ pipx install venvstacks

Alternatively, it can be installed as a user level package (although this may make future Python version upgrades more irritating):

$ pip install --user venvstacks

Interactions with other packaging tools

The base runtime environment layers are installed with pdm (with the installed runtimes coming from the python-build-standalone project). pdm is also used to manage the development of the venvstacks project itself.

The layered framework and app environments are created with the standard library's venv module.

The Python packages in each layer are currently being installed directly with pip, but are expected to eventually move to being installed with uv to reduce environment setup times during builds.

Platform-specific environment locking for each layer is performed using uv pip compile. Refer to pyproject.toml for the specific issues preventing the adoption of uv for additional purposes.

venvstacks expects precompiled wheel archives to be available for all included Python distribution packages. When this is not the case, other projects like wagon or fromager may be useful in generating the required input archives.

Caveats and Limitations

  • This project does NOT support combining arbitrary virtual environments with each other. Instead, it allows larger integrated applications to split up their Python dependencies into distinct layers, without needing to download and install multiple copies of large dependencies (such as the pytorch ML/AI framework). The environment stack specification and build process helps ensure that shared dependencies are kept consistent across layers, while unshared dependencies are free to vary across the application components that need them.
  • The venvstacks Python API is not yet stable. Any interface not specifically declared as stable in the documentation may be renamed or relocated without a deprecation period. API stabilisation (mostly splitting up the overly large venvstacks.stacks namespace) will be the trigger for the 1.0 milestone release.
  • While the venvstacks CLI is broadly stable, there are still some specific areas where changes may occur (such as in the handling of relative paths).
  • Dynamic library dependencies across layers currently only work on Windows. There is a proposal in place for resolving that limitation, but it has not yet been implemented.
  • Local exports to filesystems which do not support symlinks (such as VFAT and FAT32) are nominally supported (with symlinks being replaced by the files they refer to), but this support is not currently tested.
  • To avoid relying on the Python ecosystem's still limited support for cross-platform component installation, the stack build processes need to be executed on the target platform (for example, by using an OS matrix in GitHub Actions).

Project History

The initial (and ongoing) development of the venvstacks project is being funded by LM Studio, where it serves as the foundation of LM Studio's support for local execution of Python AI frameworks such as Apple's MLX.

The use of "🐸" (frog) and "🦎" (newts are often mistaken for lizards and vice-versa!) as the Unicode support test characters is a reference to the internal LM Studio project that initially built and continues to maintain venvstacks: Project Amphibian.

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

venvstacks-0.1.0rc1.post0.tar.gz (85.9 kB view details)

Uploaded Source

Built Distribution

venvstacks-0.1.0rc1.post0-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file venvstacks-0.1.0rc1.post0.tar.gz.

File metadata

  • Download URL: venvstacks-0.1.0rc1.post0.tar.gz
  • Upload date:
  • Size: 85.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.19.3 CPython/3.10.12 Linux/6.5.0-1025-azure

File hashes

Hashes for venvstacks-0.1.0rc1.post0.tar.gz
Algorithm Hash digest
SHA256 c8a3bbc07c23a6aac7acef1c5ee9d1e04a2994f50dc981368383b4b42673d4d5
MD5 856637074a03afbcd67a3bf7fef1e5b7
BLAKE2b-256 306a37f4e65de1b367017426ae1642855f00e9ab12f13d11ed5784a97b025753

See more details on using hashes here.

File details

Details for the file venvstacks-0.1.0rc1.post0-py3-none-any.whl.

File metadata

File hashes

Hashes for venvstacks-0.1.0rc1.post0-py3-none-any.whl
Algorithm Hash digest
SHA256 60867c3baa56efd689300193e83123df4371b44aebf7ee0331542d1f9df6d337
MD5 3b49de27d4507ac15f7aaae8e9697dbf
BLAKE2b-256 5356e71736f33bde16fb5bcc55dc02a0e764c46af61e9e96f9f71c19e5bc841e

See more details on using hashes here.

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