lmstudio-ai / venvstacks

Virtual environment stacks for Python
http://venvstacks.lmstudio.ai/
MIT License
174 stars 6 forks source link
python

Virtual Environment Stacks for Python

Machine learning and AI libraries for Python are big. Really big. Nobody wants to download and install multiple copies of PyTorch or CUDA if they can reasonably avoid it.

venvstacks allows you to package Python applications and all their dependencies into a portable, deterministic format, without needing to include copies of these large Python frameworks in every application archive.

It achieves this by using Python's sitecustomize.py environment setup feature to chain together three layers of Python virtual environments:

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

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.