venvstacks.pack_venv¶
Warning
The Python API is NOT YET STABLE. Function, class, and method names may change between releases without any deprecation period.
Utility library to convert Python virtual environments to portable archives.
- venvstacks.pack_venv.convert_symlinks(env_dir: str | PathLike[str], containing_dir: str | PathLike[str] | None = None) tuple[list[tuple[Path, Path]], list[tuple[Path, Path]]] ¶
Make env portable by making internal symlinks relative and external links hard.
If set, containing path must be a parent directory of the environment path and is used as the boundary for creating relative symlinks instead of hardlinks. If not set, the environment path itself is used as the boundary for creating relative symlinks.
Returns a 2-tuple containing lists of internal relative link conversions and external hard link conversions. Each list contains source/target Path pairs.
- venvstacks.pack_venv.create_archive(source_dir: str | PathLike[str], archive_base_name: str | PathLike[str], *, install_target: str | None = None, clamp_mtime: datetime | None = None, work_dir: str | PathLike[str] | None = None, show_progress: bool = True) Path ¶
shutil.make_archive replacement, tailored for Python virtual environments.
injects a suitable
postinstall.py
script for the environment being archivedalways creates zipfile archives on Windows and xztar archives elsewhere
excludes
__pycache__
folders (to reduce archive size and improve reproducibility)excludes package metadata RECORD files (to improve reproducibility)
excludes
sitecustomize.py
files (generated by the post-installation script)replaces symlinks with copies on Windows and allows external symlinks elsewhere
discards tar entry owner and group information
clears tar entry high mode bits (setuid, setgid, sticky)
clears tar entry group/other write mode bits
clamps mtime of archived files to the given clamp mtime at the latest
shows progress reporting by default (archiving built ML/AI libs is slooooow)
Set work_dir if
/tmp
is too small for archiving tasks
- venvstacks.pack_venv.export_venv(source_dir: str | PathLike[str], target_dir: str | PathLike[str], run_postinstall: Callable[[Path, Path], None] | None = None) Path ¶
Export the given build environment, skipping archive creation and unpacking.
injects a suitable
postinstall.py
script for the environment being exportedexcludes
__pycache__
folders (for consistency with archive publication)excludes package metadata RECORD files (for consistency with archive publication)
excludes
sitecustomize.py
files (generated by the post-installation script)replaces symlinks with copies on Windows or if the target doesn’t support symlinks
If supplied, run_postinstall is called with the path to the environment’s Python interpreter and its postinstall script, allowing execution of the post-install script by the calling application. The post-install script is NOT implicitly executed by the export process.
Returns the path to the exported environment.