Enthought Deployment Manager

Release v1.12.0.

Enthought Deployment Manager (EDM) is Enthought’s environment and application manager. You can also think of EDM as the new enstaller.

EDM attempts to implement the best principles of virtualenv managers such as virtualenvwrapper and pew as well as the Ruby Version Manager (rvm). It also derives some ideas from Nix. EDM’s main features are:

  • create multiple, self-contained environments
  • state-of-the-art SAT solver with support for conflicts, provides, and other features available in advanced package managers
  • support the existing set of ~ 500 Enthought binary packages on Linux, OS X and Windows
  • layered architecture: the core is defined to be useable by 3rd party programs (IDE, GUI) through a well defined API
  • distributed as a small (~10 Mb), single file binary on Unix. Native installers are provided for Debian/Ubuntu (.deb), Windows (.msi), RHEL/Fedora (.rmp), and OS X (.pkg).
  • experimental support for multiple python versions (2 and 3), implementations (cpython, pypy) and even languages (julia).
  • extensive inline documentation

A basic workflow looks as follows:

# will install scipy in your default environment
$ edm install scipy
# starts a new shell in the default environment
$ edm shell
(edm) $ python -c "import scipy"
$ exit # exit the shell
# If you prefer virtualenv-like activation
$ source edm-activate
(edm) $ python -c "import scipy"
$ deactivate

Multiple environments may be created through the -e/–environment option:

$ edm install "scipy < 0.17" -e test-old-scipy
$ edm shell -e test-old-scipy
# or using virtualenv-like activation
$ source edm-activate test-old-scipy

To install an alternative runtime (experimental, not available on every platform):

# Create a minimal pypy environment w/ pypy interpreter
$ edm environments create test-pypi --implementation pypy
# Create a minimal julia environment
$ edm environments create test-julia --implementation julia
# To list available runtimes:
$ edm available-runtimes

The basic command line is documented in the quick usage guide.

Internally, it is designed as a library with a corresponding CLI it; its API is documented in the API reference. The goal of the library is to support EDM integration with IDEs, applications, etc.

Developer guide

Documentation for developers interested in using EDM in their own code.


For large, complex new features, we try to go through written specifications, called Deployment Enhancement Proposal, aka DEP.