module-manager
module-manager deploys versioned Python, Rust, shell, and collective CLI
environments behind GNU environment modulefiles for Linux/HPC systems.
It writes tools and modulefiles into predictable versioned locations:
/prod/tools/<name>/<version>/bin
/prod/modulefiles/<name>/<version>
The installation prefix and module root must be different directories.
Installation
Install from PyPI:
pip install env-module-manager
Or install as a uv-managed tool:
uv tool install env-module-manager
Quick Start
Deploy a Python CLI with uv tool install:
module-manager deploy-python ruff 0.8.0 \
--package 'ruff==0.8.0' \
--default-index https://packages.example/simple \
--constraints /prod/constraints/runtime.txt \
--uv-executable /opt/uv/bin/uv \
--prefix /prod/tools \
--module-root /prod/modulefiles \
--execute-install
Set MODULE_MANAGER_UV_EXECUTABLE=/opt/uv/bin/uv to use the same uv path by
default.
To expose executable entry points from direct dependencies too, add
--with-executables-from=package1,package2. Used without package names, the
option reads [project].dependencies from the current directory's
pyproject.toml.
Python deployments also pass through uv's --with, --with-requirements,
--constraints, --overrides, --lfs, --verbose, --native-tls, and
--no-config options. --config-file is accepted as an alias for
--uv-config-file.
Deploy a Rust binary:
module-manager deploy-rust ripgrep 14.1.1 \
--binary ./target/release/rg \
--prefix /prod/tools \
--module-root /prod/modulefiles
Generate a constraints file for a Python CLI:
module-manager auto-constraints ruff==0.8.0 --output constraints.txt
Deploy from a direct wheel or Git URL:
module-manager deploy-python my-tool 1.0.0 \
--package 'my-tool @ file:///prod/wheels/my_tool-1.0.0-py3-none-any.whl' \
--prefix /prod/tools \
--module-root /prod/modulefiles \
--execute-install
Deploy a shell script:
module-manager deploy-script my-tool 1.0.0 \
--script ./scripts/my-tool \
--prefix /prod/tools \
--module-root /prod/modulefiles
Deploy a collective environment from a TOML manifest:
module-manager deploy-env --file dev-tools.toml --dry-run
module-manager deploy-env --file dev-tools.toml
Use the generated module:
module use /prod/modulefiles
module load ruff
ruff --version
Deployments make the deployed version the module default. Add --no-default
when you want to write the versioned modulefile without changing the default.
Remove a deployed version:
module-manager uninstall ruff 0.8.0 \
--prefix /prod/tools \
--module-root /prod/modulefiles
Documentation
Read the full documentation on Read the Docs.
Metadata
Release files for env-module-manager 0.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| env_module_manager-0.11.0.tar.gz | 102.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| env_module_manager-0.11.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 126.4 kB
Release files / env_module_manager-0.11.0.tar.gz
| Download URL | env_module_manager-0.11.0.tar.gz |
|---|---|
| Size | 102.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f4674d27e98bea3dcf63a271f9f80b33c8afb28d69d6268340180226d25d64d
|
|
BLAKE2b-256 checksum How to use checksums |
6703a6b496be2c823c3b7ac24f3f287357787b26875310acdeba42ff4863a7b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Release files / env_module_manager-0.11.0-py3-none-any.whl
| Download URL | env_module_manager-0.11.0-py3-none-any.whl |
|---|---|
| Size | 23.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dce7a5e6b1832d9c892cb37e968be08b562e4b335795f56ac0b75f82f26fd973
|
|
BLAKE2b-256 checksum How to use checksums |
6278a4b201ccb6a9e8df9de47860341bf1e91307486f1b9a5750613e0427c56c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|