About this project
nepenthe is a tool for building, versioning and distributing large shared conda/PyPI environments. The stated goal is to let a team describe an environment once, solve it once with rattler, freeze the result into a portable lockfile, and publish that lock to a versioned registry on any storage backend, so every machine installs the exact same environment without re-solving.
Key capabilities described in the README:
- Manifest-based composition: declarative environment manifests instead of scattered requirement files.
- Native solving via rattler (pure Rust), avoiding Python interpreter overhead.
- Portable locks: multi-platform rattler_lock files intended to be reproducible by construction.
- Cross-platform solving: solve linux-64, osx-arm64 and win-64 from a single host into one multi-platform lock.
- Pluggable backends: read/write specs to file://, s3:// and https://, with channels pointing at any server such as an internal Artifactory.
- Versioned registry: independent per-environment versioning with immutable content-addressed locks.
- Install without conda: link a lock into a prefix using rattler, with no conda/mamba/micromamba required.
- Conda compatibility: export any lock as an @EXPLICIT spec usable with conda create --file.
- Security posture: credentials are injected at use time and not written into artifacts.
The project covers a producer-to-consumer lifecycle: compose a manifest, solve and freeze multi-platform locks, publish them to a versioned registry, and install them without conda, either from the CLI or from Python. It also mentions air-gapped pack/unpack bundles and a pyproject.toml integration that keeps a project's dependencies in sync with the environment it consumes.
Workflow example from the README: a YAML manifest declares project name, channels, platforms, Python version and root dependencies; a build command produces a fully pinned lockfile; an export command renders the lock as an @EXPLICIT conda spec; and installation can be done either with conda from the spec or with nepenthe from the lock. The CLI is a single multicall binary where np and npb are symlinks to nepenthe, with npb acting as a shortcut for the build subcommand. A Python binding mirrors the CLI for build, create and activate operations. A pyproject.toml section can pin an environment name, registry and version, with sync and check commands to install the referenced environment and verify project dependencies are compatible.
The README positions nepenthe as distinct from per-project lockfiles (pixi, uv) and re-solved manifests (environment.yml): it builds and distributes a shared environment consumed by many repositories, versioned and immutable. Documentation is organized into a wiki covering motivation, concepts, manifests, channels and Artifactory, registry, installing, consuming in a project, packing, the Python API and backends, plus contributor material on architecture and building from source. The project is licensed under Apache-2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.