Changelog¶
Note
Until the Python API has stabilised, venvstacks
is using
ZeroVer (starting from 0.1.0).
Refer to Version Numbering for additional details on the way releases are versioned.
Unreleased¶
See the fragment files in the changelog.d directory.
0.5.1 — 2025-05-26¶
Changed¶
Build failures for invalid layer locks now provide more details on the discrepancies that result in the lock being considered invalid (changed in PR #181).
Fixed¶
launch_module
is now correctly set in the internalvenvstacks_layer.json
configuration file shipped as part of application layers (resolved in PR #174).Layer locks are no longer incorrectly marked as invalid solely because the lock input cache files for the declared requirements are missing (reported in #175).
Layer lock metadata generated by versions prior to 0.5.0 is now accepted as valid as long as the locked requirements file hasn’t changed (resolved in PR #187).
Resetting runtime and framework layer locks no longer prevents locking layers that depend on the affected layers (resolved in PR #187).
Repeated local builds for environments using the dynamic library loading wrapper scripts no longer corrupt the base Python environment link (reported in #184).
0.5.0 — 2025-05-12¶
Changed¶
Layer locks are now invalidated for launch module changes. This also means that implicit versioning will update the layer version (resolves #89).
The exception raised when reporting dynamic library symlink conflicts in a layer now reports all ambiguous library targets in the layer instead of only reporting the first ambiguity encountered (resolved in PR #158).
Fixed¶
Previously defined layer locks are now correctly invalidated in the following cases (resolves #149):
the layer’s declared input requirements have changed
the major Python version of the layer’s base runtime has changed
the layer depends on a layer that does not currently have a valid layer lock
the relative paths from the layer to the layers it depends have changed (including additions and removals of layer dependencies)
implicit layer versioning is enabled or disabled for the layer
Attempting to lock a layered environment now fails if any layer it depends on does not have a currently valid layer lock (resolves #161).
CLI arguments on Windows are no longer unexpectedly resolved as filesystem glob patterns (resolved in PR #160).
Dynamic library symlinks are now correctly removed if the dynamic library is no longer included in the built layer (resolved in PR #163).
As it affects launch module execution, application layer launch module hashes now incorporate the file name in addition to the file contents (resolved in PR #164).
Application layer launch packages are now consistently archived using the layer’s lock timestamp, even when that is more recent than the file’s local modification time (resolved in PR #148).
0.4.1 — 2025-04-25¶
Added¶
Locking layers now emits package summary files for each layer, which should make it easier to see what has changed when locks are updated (suggested in #108).
Changed¶
The exception raised when reporting dynamic library symlink conflicts in a layer now suggests using the
dynlib_exclude
setting to resolve the conflict (changed in PR #141).
Fixed¶
The
--reset-lock
option now propagates to derived layers as intended (reported in #137).
0.4.0 — 2025-04-11¶
Added¶
Framework layers may now specify
frameworks
to depend on one or more framework layers instead of depending directly on a runtime layer. Framework dependencies must form a directed acyclic graph (DAG), and framework layers must be defined after any framework layers they depend on (proposed in #18, implemented in PR #119).Application layers may now specify
runtime
to depend directly on a a runtime layer with no intervening framework layers (added as part of resolving #18).All layers may now specify
dynlib_exclude
to indicate dynamic libraries which should not be symbolically linked into theshare/venv/dynlib/
environment subfolder on Linux and macOS (added as part of resolving #38).
Changed¶
To enable loading of shared objects from other environment layers, framework and application environments on Linux and macOS now run Python via a suitably capable shell environment (
bash
on Linux,zsh
on macOS) that can be expected to be consistently installed (changed in #38).
Fixed¶
Extension modules on Linux and macOS that rely on shared objects published by their dependencies (for example, PyTorch depending on CUDA libraries) now work correctly even if those dependencies are installed in a lower environment layer. See How does dynamic linking work across layers? for additional details (resolved in #38).
0.3.0 — 2025-03-28¶
Added¶
The
build
andlock
subcommands accept a new--reset-lock
CLI option. This multi-use option requests that any previously created layer lock file be removed before locking the selected layers (thus ignoring any previous version pins or artifact hashes). This option uses the same wildcard pattern matching as the--include
option. Only layers that are locked by the given command will have their previous lock files removed, as excluded layers will be excluded from both locking and having their lock files reset (added in #22)."win_arm64"
and"linux_aarch64"
are now accepted as target platforms. ARM64/Aarch64 refer to the same CPU architecture, but Python reports it differently depending on the OS, and this is reflected in their respective platform tags (added in #107).
Changed¶
A Python API instability
FutureWarning
is now emitted at runtime (added while resolving #22).The previous
BuildEnvironment.get_unmatched_patterns()
method has been replaced by the newBuildEnvironment.filter_layers()
method, which returns both the matching layer names and the unmatched patterns (changed in #22).BuildEnvironment.select_layers()
now accepts an iterable of environment names rather than an iterable of filter patterns to be matched (changed in #22).
Fixed¶
0.2.1 — 2024-12-05¶
Fixed¶
Fix Typer 0.14.0+ incompatibility when setting app name (reported by Rugved Somwanshi in #96).
0.2.0 — 2024-11-14¶
Added¶
Setting
versioned = True
in a layer definition will now append a lock version number to the layer name that automatically increments each time the locked requirements change for that layer (layer@1
,layer@2
, etc). Refer to Layer names and versioning for details on when the versioned and unversioned layer names are used (implemented in #24).Added documentation for the Environment Stack File Formats (part of #78).
Added
python_implementation
to the published layer metadata (part of #78).Added
bound_to_implementation
to the published layer metadata (part of #78).
Changed¶
Enabled rendered previews for documentation PRs (requested in #43).
Enabled link validity checks when rendering documentation (requested in #62).
Renamed
EnvironmentExportRequest
toLayerExportRequest
(part of #33).Exposed
LayerSpecBase
,LayeredSpecBase
as public classes (part of #33).Exposed
LayerEnvBase
,LayeredEnvBase
as public classes (part of #33).Added leading underscores to several private functions and methods (part of #33).
Added docstrings to all remaining public functions and methods (part of #33).
Updated docs to actively discourage using
@
in layers names (part of #78).Renamed
fully_versioned_name
runtime layer specification field topython_implementation
(part of #78).Renamed
runtime_name
toruntime_layer
in the layer metadata (to align with therequired_layers
field), and simplified it to always refer to the runtime layer’s install target name (part of #78).
Fixed¶
Post-installation scripts for layered environments now work correctly even when run with a Python installation other than the expected base runtime (resolved in #66)
0.1.1 — 2024-11-01¶
Changed¶
Update docs URL to https://venvstacks.lmstudio.ai
Add OpenGraph metadata to docs landing page
Resolved several broken links in the documentation
Documentation is now marked as being unversioned (it is published directly from the main branch)
0.1.0 — 2024-10-31¶
Changed¶
Further documentation fixes and improvements
0.1.0rc1.post0 — 2024-10-30¶
Changed¶
Included project URLs in project metadata
Added installation instructions to README.md
Linked to main documentation from README.md
Improved the content split between the project overview page and the top level docs landing page
0.1.0rc1 — 2024-10-29¶
Added¶
Initial export of
venvstacks
from Project Amphibian.Adopted
scriv
forCHANGELOG
management.