All documentation can be found on Read the Docs including how to develop and contribute to the project. conda-store.readthedocs.io.
conda-store
has two packages a conda-store
(the client) and
conda-store-server
(the server). Make sure that either conda
or
mamba
are in your path.
conda install -c conda-forge conda-store-server conda-store
The conda-store
server can be easily launched in standalone mode
that carries no dependencies on databases, object storage, redis.
conda-store-server --standalone
Standalone mode runs all components together to simplify deployment. For more complex and scalable setups there are installation examples for containerized and distributed environments.
End users think in terms of environments not packages. The core philosophy of conda-store is to serve identical Conda environments in as many ways as possible. conda-store controls the environment lifecycle: management, builds, and serving of environments.
It manages Conda environments by:
- watching specific files or directories for changes in environment filename specifications
- provides a REST API for managing environments (which a JupyterLab plugin is being actively developed for)
- provides a command line utility for interacting with conda-store
conda-store env [create, list]
- provides a web UI to take advantage of many of conda-store's advanced capabilities
It builds Conda specifications in a scalable manner using N
workers communicating via Celery to keep track of queued
environment builds.
It serves Conda environments via a filesystem, lockfile, tarball,
and a docker registry. Tarballs and Docker images can carry a lot of
bandwidth which is why conda-store integrates optionally with s3
to
actually serve the blobs.
-
A
namespace
is a way of scoping environments -
An
environment
is anamespace
andname
pointing to a particularbuild
-
A
specification
is a Conda environmentyaml
declaration with fieldsname
,channels
, anddependencies
as detailed here -
A
build
is a build (conda env create -f <specification>
) of a particularspecification
at a point in time for a givennamespace
This design has several advantages:
environments
can be "rolled back" to a givenbuild
- not necessarily the latest- because each
environment
update is a new separate build the environment can be archived and uniquely identified
We mentioned above that conda-store
was influenced by
nix. While Conda is not as pure as nix (when it
comes to reproducible builds) we can achieve close to the same results
with many of the great benefits. Motivation
from this work came from the following projects in no particular
order: lorri, nix layered docker
images,
nix, nixery.
- specifications are idempotent, created once, and never updated
(this means there is no
conda install
orconda env update
). In fact there is only one Conda commandconda env create -f <specification>
. - specifications are named
<sha256-hash-of-spec>-<environment-name>
, ensuring every Conda environment is unique. - a Conda environment for example
<environment-name>
is symlinked to a specific Conda specification<sha256-hash-of-spec>-<environment-name>
.
The benefits of this approach are versioning of environments, heavy caching, and rollbacks to previous environment states.
conda-store is BSD-3 LICENSED
Our documentation has all the information needed for contributing. We welcome all contributions.