Release Notes



Support Python 3.11. Reference: #2604 Reference: #2594


Fix edm create-token –inject when the current API token in the config file or the environment is invalid. Reference: #2607


Pin EDM dependencies for reproducibility and Software Bill of Materials generation. Reference: #2601

Fixed outdated edm help requirements from CPython 2 to CPython 3. Reference: #2612



Fix an error message for the edm install command with a misplaced comma. Reference: #2581

Fix a case where edm env clone fails. Reference: #2582


Update EDM documentation and cli help to list all environment variables used by EDM. Reference: #2578

Port EDM to Python 3.8. Reference: #2585



EDM will now default to python 3.8 on all platforms except Windows-32 bit where the default will be 3.6 because Enthought’s buildsystem doesn’t support it yet. Reference: #2545


Fixed some cases where EDM would not purge environments. Reference: #2257

Fixed an issue where proxy arguments via cli don’t override proxy configuration via env variables. Reference: #2328

Fixed an error where edm would create environments with invalid env names. Reference: #1908


Remove enthought/commercial repository from the default edm config which is created when no config exists. Reference: #1773

Print user friendly error message when edm api token is malformed. Reference: #2009

Updated the edm proxy configuration documentation about percent encoding special characters, if present, in the proxy username or password. Reference: #2087

Display a user friendly error when a python runtime is missing. Reference: #2563



The edm info command now prints out proxy/network information. Reference : #2417


Fixed an issue that prevented users from searching for applications with a platform argument. Reference : #2453

Fixed an issue where setting the environment variable EDM_VERSION would break EDM commands. Reference: #2414

Fixed an issue where the edm repack-wheel command would include extra dependencies (extra_requires in with a version constraint in the repacked wheel while omitting extra dependencies without a version constraint. Reference: #2546

Fixed an issue where the edm repack-wheel command would not use the python_tag provided in the cli to process dependencies. Reference: #2547

Fixed an issue where EDM will not rm pyc files when a package is uninstalled. Reference: #2541


EDM will now import CA certificates from the OS store on Windows. Reference: #2418

The edm repack-wheel command now support wheels with a data scheme. Reference: #1798


Added a section to the documentation on how to use EDM with VS Code. Reference: #2524

Fixed an issue with some errors attempting to use python 2.7 syntax. Reference: #2447

Corrected the name of the environments help topic in the edm install command. Reference: #2451

Added short descriptions to EDM commands and fixed a typo. Reference: #1903 Reference: #2263

Updated the EDM user documentation about current limitations of repack operations with automatic dependency extraction, that is edm repack-wheel --extract-dependencies. Reference: #2544



Fixed an issue with creating environments on windows. Reference: #2520

Fixed an issue with options being passed into applications. Reference: #2503



The edm environments import and edm application install commands now support a --disable-precompilation flag that turns off the precompilation. Reference: #2513

The edm app start command now allows users to pass in options. Reference: #2503

Added a new set of commands to edm configure, edm configure repositories that will allow users to edit the repositories in their edm.yaml via the command line. Reference: #2480

Bundle installation will now be followed by byte-compilation in order to reduce the startup time for large applications: Reference: #2468

Get rid of the “unsupported shell, things may not work properly” warning for the “sh” shell. Reference: #1708


Changed the entrypoint template to use a raw string to avoid potential escaping issues: Reference: #2477

Wrapped the PATH variable generated by the edm shell command in quotes to fix an issue where environments with parentheses in the name would fail to activate. Reference: #2461

Added a constraint to the urllib3 version to avoid an issue with the insecure flag. Reference: #2498


Changed the logging timestamps to use UTC and be of the same format as the timestamps in EDM-GUI. Reference: #2488

Bumped the highest supported metadata version to 1.4 to help prepare for the rollout of python 3.8. Reference: #2485

Updated the Ubuntu version for Github Actions from 16.04 to 18.04 as support is being dropped for Ubuntu-16.04 Reference: 3287



Fixed creating a shell so that it does not acquire a lock on EDM Reference: #2460

Fixes version parsing when extracting dependencies from eggs or wheels for version matching clause (~=). Reference: #2444

Extend max retry wait time to 10 seconds per operation (up from 1 second), and raise max-retries to 10 for directory renaming and removal. Remove buggy handling code for UnicodeDecodeError and UnicodeEncodeError and just have EDM print a traceback; in practice, the majority of errors we see involving these exceptions involve internally generated errors rather than badly encoded arguments. Reference: #2222

Updated the runtime that edm is built with to 3.6.13 to fix a regression. Reference: #2469


Updated the docstring and documentation for create-token to clarify when the user will be prompted for a username and password. Reference: #2463

Updated okonomiyaki pin to >= 1.3.0 Reference: #2445

Added more documentation about proxy passwords and the list proxies command. Reference: #2471


The environment-info command now returns additional information about the edm environment. Reference: #2465

Eggs installed on windows that create proxy scripts now include some common library paths in the path. Reference: #2359



Changed the behavior of the repack commands to treat setuptools == requirements as ^= edm requirements to fix an issue with build number specification in egg and wheel repacking. Reference: #2419

Updated EDM GUI to 10.3.3. When installing an application, the GUI now uses the –force option to ignore any leftover files associated with previous failed installations. Previously, recovering from this condition required use of the command line to manually clear out the old files. Reference: #184


Changed the authorization prompt to ask for a username instead of an email address. Reference: #2416



Updated EDM GUI to 10.3.2, which contains a bugfix for proxy support. Reference: #189

Use Python 3.6.13 runtime, which contains a bugfix for CVE-2021-23336. Reference: #2430



Corrected an encoding error related to Python 2 deprecation which resulted in an error when attempting to set a proxy on MacOS or Windows. Reference: #189



  • Refactored EDM environment registration so that it happenes consistently.



  • Fixed an issue where incorrect permissions prevented EDM-GUI from launching on CentOS.


  • Added support for PEP514 on Windows. EDM created environments will now create registry entries that can be seen by tools like VSCode.


  • Updated copyright dates in license headers.

  • Added MSVC license to Windows installer.



  • Fix an encoding issue which prevented “.zbundle” files from being imported.

  • Fix improper string handling which broke the “edm app list” command and GUI functionality which depended on it.

  • Fix very long tracebacks in log files, triggered by the lack of an explicit character encoding when opening the log file.



  • Update to most recent EDM GUI release: add refresh capability for the apps page, add keyboard shortcuts (Ctrl-r to refresh application list; Ctrl-f to focus the “Filter Results” input).


  • Update the version of Python used when building EDM (to 3.6.12).



  • Fixes bug where app install and app search would fail to install/search for applications compatible with the current OS



  • Added –platform flag to edm app list-available

  • Made rh7 default platform (for rh7 compatible systems)



  • Updated EDM GUI to 10.3.0, which adds a search and filter box.


Bug fixes

  • Re-enable app signing for Windows

  • Changed api-token creation logic to be compatible with newer versions of brood.



  • New command edm configure proxy, which lets users configure a proxy to use when contacting an EDS server. This feature is also accessable from the GUI.

  • Proxy credentials no longer stored in plaintext. Either stored in secure system storage, or encrypted.

  • Improved GUI error reporting when reading configuration



  • For GUI, “Open config file” item in the Tools menu and config file watcher added


  • In the GUI, manual changes in the config file will no longer be overwritten


  • Remove dead code

  • Use multibranch pipeline for master builds

2.2.0 (2020-02-19)


  • Caching in GUI of applications and repositories

  • “Show console output” menu item and application debugger dialog

  • Add a prompt to remove conflicting environment when installing an application

  • Add DevTools installation manual and menu item

  • Add tooltip to clarify proxy settings

  • Advanced configuration section added to GUI


  • Update Python versions referred to in docs (#2249).

  • Remove dev/contributor guide from public docs (#2277).

  • Add documentation for advanced GUI configuration

  • Documentation for “show console output”

  • Fix docs relating to proxy use (#2258).

Bug fixes

  • Fixed issue in GUI with usernames containing spaces

  • Improve CLI argument escaping


  • Adjusted version label to display EDM version by default and GUI version in a tooltip


  • Constrain setuptools version during builds to retain Python 2.7 support (#2272).

  • Constrain PyInstaller version during POSIX builds (#2274).

2.1.0 (2019-12-06)


  • There is a new --add-repository option for edm search, edm install, and edm bundle generate (#2117).

  • Better support for progress reporting on non-console output (#2235).

Bug fixes

  • edm app list will no longer fail on broken application environments but ignore them (#2211).

  • edm bundle generate no longer requires authentication when only packages from public repositories are used (#2099).


  • Update the documentation regarding EDM GUI and CLI (#2212).


  • The default edm root is now the same for dev builds as it is for release builds of edm (#2199).

  • EDM is now compatible with attrs versions 19.2.0 and greater (#2187).

  • Account for possible __PYVENV_LAUNCHER__ env variable that was breaking tests on Mac OS (#2216).

  • Run tests on rh7 nodes (#2223).

  • Increase reliable_rename attempts for Windows (#2232).

  • Update simplesat dependency to 0.8.2 (#2238).

2.0.0 (2019-10-03)


  • Remove the edm gui command (#2121).

  • Change default bundle type to version 2 (#2130).

  • Change the default python version to 3.6 when creating new environments (#2122).

  • Windows desktop shortcut now links to the new EDM GUI app (#2147).

  • EDM installer without the new GUI app is called “edm_cli” (#2156, #2159).

  • Remove previously deprecated update-all command (#2181).


  • Sign binaries and notarize Mac installer (#2080, #2079).

  • Support a gui entry in the EDM.yaml config file (#2023).

  • Support ls/rm as shortcuts for list/remove (#2094).

  • Provide two EDM installers: the original command-line-EDM-only installer, and one that also includes the new EDM GUI (#2136, #2125, #2126, #2127).

Bug fixes

  • Fixed unhelpful output on failure to find a SAT solution (#1845).

  • Clean up bundle generation satisfiability errors (#1846).

  • Fix edm app list error when an environment has eam but no applications (#2129).

  • Fix bundle creation that included unnecessary repositories (#2118).

  • Prevent edm from polluting stdout for commands using the --json option (#2174).

  • Console logging is now sent to stderr (#2179).

  • Fix SSL error when using commands with the --insecure option (#2184).


  • Update edm env export command in documentation (#2072).

  • Remove license for the now unused tcl/tk (#2142, #2171).

  • Update installer to not include unnecessary gui libraries (#2123).


  • Use python 2.7.15 for all the edm installers (#2052).

  • Move Linux installer builds to centos 6 nodes (#2111).

  • Make purge a little safer (#2095).

1.12.1 (2019-07-04)

Bug fixes

  • Fix linux installers to work on recent linux systems (#2073)

1.12.0 (2019-06-04)


  • Make --purge the default when removing an environment or application (#1971, #2028).


  • Add an edm gui command to start the related EDM-GUI application (#1967, #2050).

  • Support installing an application from an application bundle file (#1788).

  • Add option to display edm gui console output in a GUI window (#1995, #2031, #2049, #2053, #2059).

  • Add a start menu shortcut for launching the EDM-GUI application on Windows (#1994, #2027).

  • Sign the .pkg installer on OSX (#349, #2017).

Bug fixes

  • Fix edm repack-egg and edm repack-wheel so that the files which are installed from their output will have the correct permissions (#878).

  • Give better error message for importing bundle with invalid json (#1381).

  • Fix Windows installer to remove older versions of EDM before installing the new files (#2051).


  • Remove obsolete roadmap from documentation (#1963).

  • Fix misleading names of release files (#1962).

  • Update help for edm upgrade-all (#1976).


  • Use pyinstaller for all platforms rather than static python build and (#1998).

  • Use okonomiyaki 1.0.0 with support for metadata 2.1 (#1957).

  • Support click 7.0 (#1972).

1.11.0 (2019-03-18)


  • Add new command application list-installed to list the currently installed EAM applications (#1925).

  • Support returning command output as json for application list-installed and application list-available commands, via option –json (#1925, #1924).

  • Support reporting action result as json for application install and application remove commands, via option –json-report (#1943, #1943).

Bug fixes

  • The bundle generate command no longer requires an authenticated user to access the free enthought repositories.


  • Fix EDM jenkins ci/cd builds (#1926, #1947).

  • Fix errors detected by recent flake8 release (#1926).

1.10.1 (2018-12-19)


  • While running an application bundle, EDM no longer locks the EDM root. This allows other EDM commands to be performed while the application is still running (#1850).

  • License information for the libraries used by EDM is now included in the text printed by edm license. The license text is also now included in a LICENSE file installed along with EDM (#1866).


  • Update the installer documentation (#1838).

  • Add documentation about updating the bundle_repositories configuration option in order to find application bundles in repositories other than enthought/free (#1858).

  • Updated note about uninstalling the old version before installing EDM (#1847).

  • Added documentation about EDM’s locking and read-only behaviors (#1630).

  • Fixed sample command line for installing EDM with msiexec (#1860).

Command line interface changes

  • Refactored the bundle generate command so it uses the global --config and --api-token options instead of having its own version. Consequently, if you were using EDM with those options after bundle generate on the command line then you should move those options to be before the bundle generate part of the command line (#1852)

Bug fixes

  • Fix error message when searching for an EDM application which is not found (#1856).


  • Fixed invalid escape sequences identified by flake8 (#1867).

  • Updated EDM to use the newest version of the attrs package (#1870).

1.10.0 (2018-09-05)


  • A new application command group has been added to support downloading, installing and removing applications (#1808, #1805, #1783, #1806, #1754).

  • A new bundle command group has been added to support basic bundle creation operations (#1746).

  • Support creating EDM bundles from a list of requirements, using the bundle generate command (#1619).

  • Update Windows MSI installer to add support for non-admin user installs (#1609, #1827, #1830, #1836).

  • Sign Windows MSI installers (#1784).

  • New command group alias env/environment for the environments command group.

  • The hatcher library version is now visible in the edm info report (#1800).

  • The new bundle_repositories configuration option is now visible in the edm info report (#1799).


  • Document the different ways to execute scripts in EDM environments (#1723).

  • Document the new application command group (#1810).

  • Update information on the shell configuration option.

Bug fixes

  • Better error message when the --config option is used with an embedded EDM (#1705).

  • Better error reporting when the runtime post install stage fails (#1639).

  • edm envs export and edm freeze would not always detect the currently activated environment (#1722).

  • Bundle modifiers were written out in arbitrary and changing order (#1721).

  • Do not create an invalid enpkg entry point (#1694, #1692).


  • Updated hatcher version (0.12.0).

  • Use EDS v1 API entry points throughout the codebase.

  • Support running the EDM tests inside an EDM environment.

What’s new


In the past, an EDM bundle could only be created by exporting an existing environment. A bundle specifies a specific Python version and a collection of packages and their versions that are installed in the exported environment. This facilitates recreating an exact duplicate of the environment. The downside of creating bundles like this is that they are tied to the platform and can only be used to create a new environment on the same platform.

With the addition of the new bundle generate command, it is now possible to create a bundle that targets a platform other than the one used to create the bundle file. It does not use an existing environment to determine the packages to be included in the bundle. Instead, the requirements are specified on the command line.


EDM now has the ability to create and manage complete “applications”, which are basically normal EDM bundles which also include the Enthought Application Manager (EAM) package, and which can define an icon to be used to create a launcher for the application. When the application is installed a normal EDM Python environment is created, and the launcher icon uses EDM to launch the application. The EDM application command group can also be used from the command-line to start, install, remove, or search for applications on the Enthought Deployment Server (EDS).

1.9.2 (2018-03-19)

This release fixes a bug which could incorrectly remove a lock file, and thus potentially allow corruption of a Python environment by simultaneous inconsistent maintenance actions. It is recommended for all users to upgrade.


  • edm info will show the read/write state of the EDM root and the Python bit architecture of the EDM executable (#1687, #1662).

Bug fixes

  • Fix the stale lock validation code to correctly handle timezones (#1712).

1.9.1 (2018-01-23)

This bugfix release brings a few fixes for EDM, but most importantly enables automatic stale access lock detection, a feature that was accidentally disabled in 1.9.0. It is recommended for all users to upgrade.

Bug fixes

  • The automatic removal of stale access lock was not activated (#1677).

  • Handle special case where access lock file is empty (#1679).


  • Handle reading aborted Remove transaction records from the environment transaction database for which there is no package version (#1672).

1.9.0 (2017-12-19)


  • Windows 32-bit installers (#1661).

  • environments create accepts a –abi option to filter the available runtimes (#1603).

  • EDM can now detect a stale access lock and automatically remove it, eliminating the need for manual cleanup (#1640).

  • repack-wheel command now supports the scripts prefix scheme of the Wheels 1.0 specification, meaning that most wheels should now be repackable as enthought eggs, compatible with EDM’s dependency-resolution system (#1633).

  • mark-read-only and mark-read-write are idempotent, removing unnecessary error messages when they are used redundantly (#1622).

  • EDM settings now support the ca_certificates option to provide alternative certificate bundles (#1590).

Bug fixes

  • Update README (#1604).

  • Remove unnecessary reporting of installation errors that succeed when retried (#1589).

  • Miscellaneous documentation fixes (#1634).

  • Fix issue on OSX installations where /url/local/bin does not exist yet (#1611).

  • EDM will not create a new environment if the specific package requirements cannot be met so that the command can be retried with only removing the missing package (#1599).


  • Updated okonomiyaki version (0.17.3)

  • Better testing of the samefile function (#621).

1.8.3 (2017-10-27)

Bugfix release of edm


  • edm repack commands support –extract-dependencies to automate dependency extraction from the package being repacked (#1614)

  • improved documentation for repack commands and package dependency management (#1613)

  • edm environments list will now show the abi (#1605)

Bug fixes

  • Fix InvalidSettings exception when using repository names with hyphen (#1594)

  • Fix typo in installer text (#1607)

  • Improved error message when export fails due to cache issue (#1612)


  • Updated setuptools version (36.6)

1.8.2 (2017-07-26)

Bugfix release of edm version 1.8.2

Bug fixes

  • Update requests and urrlib3 to the latest releases (#1574)

  • CalledProcessError when repacking egg (#1566)

  • Fix error handling in data bundle sh installer (#1571)

1.8.0 (2017-07-13)

This minor release brings the usual set of bug fixes and improvements. It is recommended for all users to upgrade.


  • support for read-only environments has been added, allowing Administrator-controlled environments to be shared by multiple users, while still allowing users access to basic read-only commands like edm environments list and edm list.

  • support for repacking wheels to Enthought-format eggs using the edm repack-wheel command.


  • add a new edm list-available command to list packages available to be installed (#1265).

  • add support for using some EDM commands in read-only environments (#1302)

  • add option to select a destination directory for edm repack-egg results (#1512).

  • add environment platform to output of edm environmentss list (#1537).

  • add a new edm repack-wheel command to repack a wheel into an Enthought egg (#1548).


  • add documentation for bundles (#1462).

Bug fixes

  • allow removing petrified environments by providing the --purge flag to edm envs remove (#1246).

  • package repository indexes are no longer fetched when not needed (#1300).

  • the edm remove command no longer suggests to install an environment (#1481).

  • fix edm environments create --force to force-remove the old environment if necessary (#1524).

  • fix the sh linux installer exit code on successful install (#1525).

  • bypass the packages cache for packages with file names that are too long for Windows (#1544).


  • add internal support for retrying package and runtime installation when installing bundles (#1553).

  • add a new EnvironmentsManager.can_create_environment method (#1486).

  • fix retrying I/O functions that use recursive calls (1555).

  • refactor session handling for performance improvements when no network access is required (#1545).

1.7.1 (2017-06-14)

This micro release fixes binary installers. It is otherwise functionally equivalent to 1.7.0

Bug fixes

  • update to uses attrs >= 17.1.x and okonomiyaki >= 0.16.10 (#1515).

1.7.0 (2017-06-08)

This minor release brings the usual set of bug fixes and improvements. It is recommended for all users to upgrade.


  • package installation and removal can now be interrupted without corrupting the environment. If for any reason package installation/removal is interrupted, the user can attempt to fix it by using the fix-broken command.


  • make single package install/removal more robust to interruption (#1125)

  • allow overriding http max retries from the CLI. (#1477)

  • avoid creating superflous processes on unix when running edm at the CLI (#1508)

  • add runtime version and package count to edm envs list (#1503)


  • update help text from using rh5 examples to rh6 (#1461)

Bug fixes

  • handle entry points of the form ‘package.module:Class.method’ (#1449)

  • fix whats-new command. (#1497)


  • Refactor EggArchive to compute (source, target) pairs explicitly (#856)

  • environment commands do not really use EnvironmentsManager.purge (#1382)

  • update static python used on Unix, to fix pyexpat import error. (#1472)

  • fix edm to work w/ attrs 17.x. (#1480)

  • use a short temporary directory. (#1482)

  • don’t use shutil.copytree, it is an evil function (#1494)

  • idempotent runtime install (#1502)

  • idempotent runtime remove (#1506)

1.6.1 (2017-05-12)

This micro release fixes an issue on MacOS and Linux for the command repack-egg.

Bug fixes

  • update the static python used on Linux and MacOS, to fix pyexpat import error (#1473)

1.6.0 (2017-05-02)

This minor release brings the usual set of bug fixes and improvements. It is recommended for all users to upgrade.


Linux environments now default to rh6-x86_64

By default, any EDM command creating a new environment will now default to the rh6-x86_64 platform on Linux. This does not change existing environments, and you can of course still create rh5-x86_64 environments through the --platform option:

$ edm install pandas --platform rh5-x86_64

Bundle format 2.0

The old 1.0 format was tracking repositories “globally”, whereas the new format tracks the repository for each asset (packages and runtime). The new format also stores the sha256 for each asset, to ensure the assets are exactly the same in the imported environment. To create 2.0 bundles:

# Export the foo environment as a 2.0 into the my-env.json file
$ edm envs export -m 2.0 -f my-env.json foo


To create bundle 2.0, the environment has to be created from EDM 1.5.2 or above, and the data cache needs to be cleaned up:

$ edm cache purge --all --extracted-only

Data bundles

This new format allows creating data bundles, which are essentially zipfiles containing both the bundle metadata and all assets required to re-create the environment. Hence, these bundle files can be used to create EDM environments on disconnected machines:

$ edm envs export -f --include-assets <env name>
# Now copy this file on the target machine where you want to
# re-create the environment. This works even if the target machine does
# not have internet access.
$ edm envs import -f <env name>

Better .sh installers (OS X and Linux only)

The .sh installers have been improved. They now prevent overriding target directories by mistake, and can optionally contain a data bundle so that custom EPD-like .sh installers can be created.


  • On linux and macOS, EPD-like installers are now possible (#1202)

  • Improve failure behavior when creating environments. (#1206)

  • Minor improvements to edm shell error message (#1212)

  • Improve bundle format to guarantee reproducibility, aka bundle format 2.0 (#1224)

  • Include column header in available-runtimes (#1231)

  • Make release notes publicly available (#1237)

  • Update readme to reflect removal of edm entrypoint. (#1240)

  • DOC: clarify inline help around environment creation (#1248)

  • Flags to override defaults to edm search (#1249)

  • edm whats-new should list the repository source (#1253)

  • edm export does not requires a connection anymore (#1260)

  • --insecure can be configured in the configuration file (#1295)

  • Add an exists sub-command to environments (#1323)

  • Store the repository and sha256 of the installed runtime (#1371)

  • edm shell kind can now be controlled from an environment variable (#1393)

  • Add environment-variables topic help. (#1446)

  • Linux environments now defaults to rh6. (#1451)

Bug fixes

  • msiexec now install EDM into (64-bit) Program Files (#1183)

  • edm should not add packages to the manual package list if the install goes wrong (#1262)

  • Unable to parse requirement on export (#1297)

  • Don’t look at . directories in pkg-metadata (#1298)

  • edm bundle export/import doesen’t respect order of installation (#1307)

  • edm run fails for some commands on windows cmd shell (#1308)

  • In CMD/PowerShell, some error messages use bold red, some use dark red. (#1311)

  • Post install scripts that use other packages may fail importing (#1344)

  • Key Error in edm history (#1363)

  • Unexpected error: InvalidConstraint(“‘7z == 9.20-2’ (bad distirbution name)”,) (#1366)

  • Always disable urllib3 warning when verify_ssl is False. (#1408)


  • Avoid unnecessary builds on appveyor. (#1351)

  • Pass args from top edm.__main__ function for canopy. (#1359)

  • Object model for environment bundles (#1360)

  • Add tags to the travis-ci branch whitelist. (#1361)

  • PackagesManager instances can now be created without a session (#1388)

  • Only create a session for data bundle export when necessary (#1402)

  • Increase windows fs operations retry timeout (#1403)

  • Update attrs in (#1423)

  • Use more recent version of attrs for frozen support. (#1424)

1.5.2 (2017-04-18)

Released on 18th April 2017.

Bug fixes

  • fix edm run on windows (#1438)

1.5.1 (2017-04-13)


  • each environment runtime’s sha256 and repository are not tracked (#1379)

  • backports bundle metadata format 2.0 (#1385, #1387)


  • edm.__main__.main now takes an args argument (#1359)

  • bundles now use an object model (#1360)

  • simplesat is updated to 0.8.1 (#1369)

  • increase timeout in rename on windows (#1426)

Bug fixes

  • fix pkg-metadata parsing to be robust about .DS_store and other OS-created files presence (#1298)

  • bundle import does not respect order of installation (#1307)

  • fix edm run behaviour on windows when given command with args (#1308)

  • fix history when upgrade-all command is used (#1363)

  • fix/update library list in edm versions (#1370)

1.5.0 (2017-03-15)

No functional changes compared to rc2.


  • backports improvements to CI (#1356)

1.5.0rc2 (2017-03-14)

This fixes 2 issues detected in rc1:

  • egg post install scripts are now run as if they were executed through the edm run command (#1344).

  • update okonomiyaki to 0.16.9 to parse PKG-INFO format 1.2 (#1350)

1.5.0rc1 (2017-03-13)

This minor release brings the usual set of bug fixes and improvements. It is recommended for all users to upgrade.


  • new command upgrade-all to support updating every installed package to the latest version (#1330). update-all is deprecated in favor of update –all.

  • new command versions to list all the important lib names. (#1285)

Bug fixes

  • -e bash installer flag does not work (#1207)

  • new entry point can be from wrong (parent) environment (#1208)

  • error on importing egginst.utils (#1264)

  • EDM activate scripts for python3 do not setup PATH correctly on windows (#1203)

  • “Update All” in PackMan: ValueError: max() arg is an empty sequence (#1270)

  • permissions issues in PKG-INFO files (#1277)

  • edm repack-egg bypasses -a arguments (#1306)

  • handle Ctrl+C gracefully in environment’s edm entry point (#1318)

  • better error handling for people trying to execute edm-activate (#1319)

  • edm run – command should not crash if command is not found (#1325)

  • introduce egginst.utils.rm_rf to fix some post install scripts. (#1333)


  • edm installer on OSX should not use system libssl ? (#1244)

  • update binary EDM’s python to use 2.7.13. (#1288)

  • update dependencies for attrs/zipfile. (#1337)

1.4.0 (2017-01-06)

This minor release brings the usual set of bug fixes and improvements. It is recommended for all users to upgrade.


  • support running edm from C:Program Files (#1181)

  • edm info: include prefix of activated environment (#1218)

  • edm envs create now takes a –platform argument to install different (but compatible) platforms (#1269)

Bug fixes

  • confusing help message from edm egginst –help (#1210)

  • error messages hard to read in Windows Command Prompt (#1252)

  • edm shell should work even when SHELL is not defined (#1236)

  • default .edm.yaml should not include enthought/pypi (#1219)

  • in embedded mode, edm overrides the embedded configuration (#1261)

  • fix egginst.main –remove to handle <name>. (#1271)


  • allowing edm within edm (#1159)

1.3.0 (2016-12-02)

This minor release brings the usual set of bug fixes and improvements. It is recommended for all users to upgrade.


  • use click.Choice to enumerate possible implementations, to make the implementation discoverable (#1104)

  • history now shows which command was executed for each transaction (#1113)

  • edm run now prints a message for segfaulting commands (#1200)

  • edm plumbing fetch-and-install has a new –bypass-matching-requirements flag to not error out for already installed matching requirements

  • edm repack-egg now accepts an optional path for endist.dat (#1222)

Bug fixes

  • edm environments upgrade is fixed (#1190)

  • error out when custom root directory is not absolute (#1185, #1221)


  • expose abi and language_version in RuntimeMetadata objects (#1225)

  • branding fixups (#1089, #1180, #1191)

1.2.0 (2016-10-15)

This version fixes some issues, and adds a few useful features. It is recommended for all users to upgrade.


  • fix the egregious Access Denied error on windows

  • edm-activate batch and powershell scripts included in the windows installers:

    # This will activate the given environment in the current shell, ala
    # virtualenv.
    $ edm-activate <environment-name>
  • add a clone subcommand in edm environments to create new environments as copies of existing ones:

    # Create a new environment bar which is an exact copy of foo (same
    # python version, same packages, etc.)
    $ edm environments clone -e foo bar


  • implement edm-activate for .bat and .ps1 (#930)

  • provide better error message for WindowsError: Access is Denied (#1063)

  • unable to shell into environment when in environment directory (#1064)

  • edm info should not display cache information (#1116)

  • speed up travis-ci builds (#1122)

  • implement force to edm envs remove (#1127)

  • fix handling of files_to_install.txt on windows (#1130)

  • fix traceback printed when exiting out of a long running EDM shell (#1143)

  • clone environments command (#1154)

  • replace Sheeplessly with more direct wording (#1163)


  • create a nightly Jenkins job for building doc, remove it from travis-ci (#684)

  • update roadmap in doc (#1071)

  • document release process (#1139)

  • docs: Add docs for updating gh-pages and installers links post-release (#1145)

  • use wheel caching on travis-ci. (#1150)

  • experimental: use latest PyPy in travis-ci(#1157, #1158)

  • fix gh-pages script to copy contents of html directory (#1171)

1.1.0 (2016-12-13)

This is EDM 1.1. This version fixes some issues, and adds a few useful features. It is recommended for all users to upgrade.


This release brings the following new features:

  • a tentative plumbing CLI to help for a new internal edm-based buildsystem. This (private) CLI is not stable and can change at anytime

  • every command changing the packages’ version set in an environment now checks whether the environment is consistent or not

  • a new edm fix-broken command to fix broken dependencies

  • the ability to install 32 bits environments in 64 bits EDM (windows-only)

  • logfile support with edm –log-file (or the configuration file)


  • user command to validate environment or make it consistent (#872)

  • it should be possible to install 32 bits runtimes on 64 bits windows (#896)

  • user/CLI Docs polishing (#1019)

  • track inconsistencies in PackagesManager methods using the solver (#1087)

  • add some “plumbing” commands (#1096)

  • add CLI for plumbing commands. (#1097)

  • add plumbing command are-packages-installed (#1098)

  • add plumbing environment-info (#1109)

  • logfile support (#1110)


  • flake8 failures with new 3.0 release (#964)

  • write a script to easily update gh-pages (#1083)

Bug fixes

  • search ignores –version if an environment exists (#1044)

  • fix test suite when running on a released version (#1070)

  • purge flag does not work on partially removed environment (#1055)

  • post install scripts result in cmd.exe consoles popping up when used from GUI (canopy). (#1081)

  • require attrs < 16.1.0 to support okonomiyaki 0.16.3 (#1108)

  • use abspath in prefix check (#1115)

Version 0.8.0

This is EDM 0.8.0. This version is intended to be the first release candidate toward 1.0. All critical features and bugs should be addressed in this release.

The public API (as available in edm.api) is considered stable, and will not change unless critical issues are found before 1.0.


This release brings the following new features:

  • Egg and runtime cache management, including viewing the cache contents and removing some or all of the cached files.

  • Optionally add EDM installation folder to PATH when using MSI

  • Automatically install pip and setuptools into new environments

  • Expanded documentation and logging


  • Implement basic logging (#309)

  • handle migration from existing user environment w/ e.g. EPD installed (#403)

  • Improve descriptions and help messages for some error modes (#411)

  • Write a cache manager for managing eggs (#722)

  • Validate repository names in .edm.yaml (#736)

  • Better message if package has no dependencies (#745)

  • Do not copy auth information when converting from .enstaller4rc to .edm.yaml (#752, #915)

  • Constraint modifier flags should accept multiple package names as arguments (#760)

  • User notifications about authentication (#772)

  • Implement aliasing system for click commands (#785)

  • Suggest alternatives for misspelled packages (#807)

  • Customize MSI to offer to add the EDM installation folder to PATH (#819)

  • Cache extracted runtimes (#823)

  • Lazy execution for environment import (#829)

  • Improve inconsistent requirement error message on failed environment import (#830)

  • Documentation for environment import/export (#835)

  • Ensure we remove .pyc when removing runtimes and packages (#844)

  • publish .sh installers on enstaller-assets (#851)

  • Add short_help topics to CLI commands to avoid help topics display ugliness (#853)

  • Fail when trying to export an environment with inconsistent requirements (#911)

  • Documentation for install REQUIREMENTS parameter (#916)

  • Add –force option to environment creation (#959)

  • Document what constraint modifiers are and how to use them (#961)

  • By default, add pip and setuptools to new environments (#963)

  • Enable edm search without an environment (#969)

  • Don’t display plaintext auth warning when running EDM in embedded mode (#998)

  • Document advanced usage options (#1008, #1010)

  • Improve robustness after interrupted/incomplete operations (#1026, #1028)


  • Refactor repository_factory tests (#322)

  • Sign the .pkg on OS X (#349)

  • Fix root directory access tests on windows (#524)

  • Use the event system for communicating lock retries / timeouts (#574)

  • Refactor indices in test code (#601)

  • Remove tests for handling simple auth tuples returned by edm.cli.credentials.CredentialsPrompter (#778)

  • Move package manager and egg creation utility to base test class (#803)

  • Use edm.utils.json_validator for edm.settings.Settings (#828)

  • Create environment_info-like object from uninstalled runtime metadata for lazy runtime installation (#860)

  • Use YAML for environment import/export (#873)

  • Refactor: rename env import/export (#884)

  • Refactor: use PackagesManagerTestMixin to mock indices (#892)

Bug fixes

  • Do not show obsolete packages when doing search (#297)

  • Clean up directory when environment is removed using CLI (#377, #422)

  • install and update should mark the corresponding requirements to manual (#658)

  • Fix pypi repo usage detection. (#730)

  • install and update should update constraint modifiers database (#743)

  • Fix git failure when installing from README directions (#753)

  • Do not print Installing/removing packages when doing nothing (#765)

  • update pkg can end up downgrading pkg (#782)

  • Executable binaries seem to have lost executable permission (#878)

  • Workaround windows fs in rm_rf (#879)

  • edm freeze no longer outputs compatible requirements (#880)

  • Multiple –allow-newer fail silently (#882)

  • Python interpreter header contains references to old app name (#886)

  • Search results are not properly aligned (#890)

  • Few issues with edm shell command (#900)

  • Unfriendly error for invalid yaml in config file (#904)

  • Bad default filtre when using –implementation pypy (#905)

  • Wrong shebang in pip-installed packages (#935)

  • don’t prune egg-info anymore, as this creates broken eggs. (#952)

  • Cleanly uninstall packages with symbolic links to directories (#1017)

Version 0.7.0

This is EDM 0.7.0. This version is intended to be the first alpha toward 1.0: it is feature complete, but it may still contain critical bugs, and is not recommended for production use yet.

The public API (as available in edm.api) is also considered stable, and will not change unless critical issues are found before 1.0.


Note: this release changes the on-disk format for environments. ENVIRONMENTS CREATED WITH 0.6.0 OR BELOW ARE INCOMPATIBLE WITH ENVIRONMENTS CREATED WITH 0.7.0. We intend to keep the on-disk format compatible throughout the 0.x (from 0.7.0) and 1.x series.

This release brings the following new features:

  • package is officially renamed to the Enthought Deployment Manager, aka EDM

  • update and update-all commands get a new set of flags –deps and –latest, and gives more reliable answers.

  • extracted eggs are cached, making eggs installation up 2.5x faster in some cases.

  • cached assets such as eggs and runtimes are now safe to share across platforms, as they are stored by checksum. In particular, caching both 32 and 64 bits eggs on windows is safe.

  • environments can now be exported and re-imported into a different machine.

  • EDM can now run without authentication (giving same access than free users)

  • EDM can run in so-called embedded mode, when integrated in a larger application (such as canopy). In embedded mode, the embedding application controls the settings and root directory for EDM.


  • edm shell should use running shell on windows (#58)

  • EDM should be able to run without auth setup (#325)

  • verify request validity before downloading index. (#328)

  • nested shells calls don’t nest $PATH anymore (#402)

  • show where packages came from in edm list (#458)

  • improve invalid settings error messages (#483)

  • give meaningful error message when enstaller is installed explicitly or implicitly (#487)

  • new command edm path -e <environment name> to return the plain root path of the env (#504)

  • environment persistance for modifiers (#509)

  • lockfile notification should indicate that global.lock is directory (#645)

  • revisit wording of message displayed to user when constraints are listed (#652)

  • use checksum to determine egg caching location (#672)

  • update can result in unexpected new solver solutions (#674)

  • cache extracted eggs to make installation faster (#697)

  • update the user agent string (#716)

  • add a canary in our dummy egginst/enstaller to detect actual enstaller installed (#720)

  • fix available handling (#724)

  • remove associated constraints when packages are uninstalled (#732)

  • update comment line in edm.yaml file for cached egg location (#744)

  • it should be possible to add constraint modifiers using edm constraints (#755)

  • tweak wording when creating new subshell (#761)

  • with the new egg scheme, fetch should not re-compute checksum if the egg is already there (#784)

  • rename mark-show command to list-manual (#795)

  • use “packages” instead of “requirements” w.r.t. constraint modifiers (#797)

  • environment export (#802)

  • execute command context even if there are no changes (#804)

  • MSI no longer adds installation folder to PATH. (#818)

  • handle unavailable repositories (#821)

  • better error message when settings can’t be validated. (#834)

  • add some settings examples in edm help configuration. (#838)

  • edm help prints help message when invoked without arguments (#842)


  • add appveyor support (#9)

  • specify and update the metadata for installed packages (#570)

  • cleanup OSError/IOError handling (#575)

  • use monotonic timers when measuring durations (#576)

  • installing egg should write the full content of EggMetadata version 1.4 (#618)

  • make setup_dummy_environment return the environment_info instead of prefix (#640)

  • polish internal update API (#657)

  • update message implies downgrade for packages which do not change versions (#664)

  • remove egginst imports (#679)

  • remove (#701)

  • rename to (#721)

  • unix binaries use new python static w/ statically linked ctypes. (#766)

  • remove UI to inject simple style auth into config file (#777)

Bug fixes

  • no-op updates can appear in install plans. (#320)

  • packages Manager seems not to honor Transactions (#413)

  • graceful handling of ctrl+c (#455)

  • fix python tag settings bug (#619)

  • if enstaller is installed in an env, new package installs fail with a KeyError (#694)

  • confusing error message when a user does not have access to a repository (#707)

  • windows installer adds invalid entry to System’s PATH (#734)

  • windows EDM installed to C:Enthoughtedm by default (#735)

  • don’t mention obsolete ‘{PLATFORM}’ feature of files_cache. (#750)

  • clearer message when no environment is specified. (#781)

  • failing tests when not using bash (#800)

  • crash when removing non-python environments (#826)

  • bypass Windows ExecutionPolicy settings. (#815)

  • remove symlinks when removing environment (#840)

  • edm help works with invalid configuration (#843)

Version 0.6.0


This release brings the following new features:

  • better and more fine-grained update/update-all behaviour

  • persistent constraint modifiers to workaround broken dependencies

  • new shell-based installers on linux and OS X

  • rudimentary protection around concurrent access to prevent two EDM instances to corrupt a root directory

EDM also starts to expose a public, documented API.

Internally, EDM is finally 100 % free of any enstaller/egginst code at runtime.


  • Default runtime version is now implementation specific in commands implying runtime installation (#211)

  • configure does not validate the token when input directly (#236)

  • Add a config topic to the help (#318)

  • EDM is now more robust against checksum failures (#375)

  • Improve update-all (#404)

  • One should mark updates as downgrade when relevant in our command messages (#418)

  • Report download and installed size, when reporting the expected changes (#454)

  • Self-extracting shell installers for linux/OS X (#508)

  • New progress behaviour for install/removal (#542)

  • Persistent constraint modifiers (#625)

  • Enable constraints display in install, remove, update and update-all commands. (#650)

  • Use the newly available sha256 for checksumming packages (#690)


  • Update satsolver lower bound to 0.3.1

  • Every command needing auth goes through the same auth setup (#245)

  • Settings does not store platform or python_tag anymore (#366)

  • os.path.exists and os.access(path, F_OK) are redundant (#385)

  • Factor out exception handling for commands that use the solver (#488)

  • Be consistent about __str__ vs __unicode__ (#561)

  • Use target runtime’s platform to decide where to cache fetched eggs (#616)

  • Don’t import egginst in EDM (#617)

  • Don’t import enstaller for installing eggs anymore (#620)

  • Use EggMetadata to parse eggs everywhere (#642)

  • Fetcher breaks into the hatcher layer to fetch a package (#663)

  • Use runtime information when computing repository info (#629)

  • Remove redundant PackageMetadata.python attribute. (#649)

  • Emit download events to the right topic in AssetFetcher (#682)

Bug fixes

  • Fix start/stop emitter to not emit stop when error occurs (#182)

  • We give an error to the user when trying to install packages in non-python environments (#224)

  • Requirements output by freeze can now be fed to install (#448)

  • Prevent removing activated environments. (#436)

  • Trying to create an enviroment with the same name fails with a trace back (#453)

  • KeyError while installing packages on windows 64 with EDM 0.5 release (#572)

  • Subscribing to package fetch events does not work (#597)

  • Installing egg w/ legacy egg info directory fails (#668)

  • Fix rm_rf to handle symlink like rm -rf does. (#644)

Changes since 0.3.0


  • errors are shown for unsatisfiable requests when using sat-solver

Version 0.3.0


  • polish the output of most commands

  • support for the new SAT solver. To use the new solver, add the line:

    solver_kind: 'sat'

    in your ~/.edm.yaml file

Bug fixes

  • invalid settings in configuration does not crash edm anymore (#213)

  • fix test for released versions (#344)


  • add info command to display detailed runtime information.

  • available-runtimes output is now computed with tabulate.

  • update to click 6.2

  • doc: topic’s help and quick intro are now consolidated from the same sources.

  • output is now more consistent across commands (#277)

  • by default, the prompt is now overriden in the shell command (#304)

  • experimental support for the new SAT solver (#315), as an opt-in option: you need to explicitly set it up in your ~/.edm.yaml.


  • package explicitly installed are now tracked internally, to help the new SAT solver (#307)

  • don’t use ETAG anymore for http request caching, as it is too unreliable (#336)

Version 0.2.0rc1

Released on 11.11.2015.

This release contains numerous bug fixes and improvements upon the initial prototype. From now on, we will try (but do not guarantee yet) backward compatibility at the CLI level and on-file formats.


  • support for alternative runtime’s implementation and languages (#196)

  • new configure command for easier onboarding (#237)

  • edm help accept topics (#215)

  • edm packages list now sort its output alphabetically (#206)

  • –insecure automatically disables urllib3 warnings (#223)

  • -v for verbose output now supported (#241)

  • edm –version is more informative (#243)

  • edm environments list now marks the activated environment (#252)

  • runtimes are now called environments to avoid confusion with brood runtimes (#240)

Bug fixes

  • edm search is fixed (#166)

  • Debian installer now works on Ubuntu 12.04 (#167)

  • edm does not crash when some package are missing during installation (#168)

  • ensure written values in edm yaml configuration are properly escaped (#190)

  • when creating a token, ensure it does not exist yet first (#246)

  • shell command does not crash anymore when the target environment does not exist yet (#251)


  • dependency solver actions are now executed through edm-only code. We don’t use the clumsy Enpkg class anymore

  • much better layering between edm.core and edm.commands/edm.cli. In particular, no code in edm.core writes into stdout or prompts for user interaction.

Version 0.1.0rc1

Initial release.

Released on 26.08.2015.

Main features

  • support for python 2 and python 3 runtimes.

  • python runtimes are upgradeable in-place

  • dummy enpkg and egginst for backward compatibility

  • seamless UI to switch between “runtimeless” mode and runtime mode

  • single file distribution on linux and os x

  • natives installers for every supported platform (rpm, deb, msi and osx pkg).