Skip to content

Overview of changes in EasyBuild version 5.0


EasyBuild 5.0 is currently still under development, via the 5.0.x branches in the EasyBuild GitHub repositories.

We intend to update this page regularly as the planned changes are being implemented and when there are proposed changes where we are requesting community feedback.

This page provides a concise overview of the most prominent changes in EasyBuild version 5.0, which can be categorized as:

For in-depth details on a particular change, see the pull requests that are linked from each of the subsections below.

Planned and proposed changes for EasyBuild v5.0

At the EasyBuild User Meeting, Simon Branford set out the roadmap for EasyBuild v5.0.

Proposed changes for EasyBuild v5.0

There are several proposed changes where the EasyBuild maintainers are seeking community feedback. If you wish to provide feedback then please comment in the GitHub issue for the proposal.

Planned changes for EasyBuild v5.0


This list is the major planned changes. It is not intended to be a complete list of all changes that are planned for EasyBuild v5.0.

Tracking development of EasyBuild v5.0

Significant enhancements in EasyBuild v5.0

Various significant enhancements are included in EasyBuild v5.0, including:

--trace enabled by default

The --trace option is enabled by default (see easybuild-framework PR #4250). This makes the output produced by the eb command more informative, by providing more information about what's going on in the background.

To disable trace output, either:

  • Use the --disable-trace command line option;
  • Set the $EASYBUILD_DISABLE_TRACE environment variable;
  • Disable trace mode in a configuration file:


Backwards-incompatible changes in EasyBuild v4.0

A number of backwards-incompatible changes are being made in EasyBuild v5.0:

Support for Python 2.7 is removed -- Python 3.6+ is required

EasyBuild 5.0 requires Python >= 3.6 to run.

Running EasyBuild with Python 2.7 or a Python 3 version older than Python 3.6 is no longer supported.

Trying to run EasyBuild with a Python version that is too old will result in an error:

ERROR: No compatible 'python' command found via $PATH (EasyBuild requires Python 3.6+)

Python 2.7 has been end-of-life since 1 Jan 2020, and dropping compatibility with Python 2.7 and Python 3.5 enabled some significant code cleanup (see easybuild-framework PR #4229).

The results of the 6th EasyBuild User Survey (2022) show that the impact of this breaking change on the EasyBuild community should be very limited, since:

  • Only ~13% of survey participants were still running EasyBuild on top of Python 2.7;
  • No survey participants reported using Python 3.5;
  • Over 85% of survey participants reported using Python 3.6, or a more recent version of Python 3;
  • Only 3 out of 118 survey participants (~2.5%) reported that dropping support for running EasyBuild on top of Python 2 would be problematic for them;

Along with actively removing code that was only required to retain compatibility with Python 2.7 or 3.5, the module that was introduced to facilitate supporting both Python 2.7 and Python 3 has been deprecated (see also below).

Deprecated EasyBuild bootstrap script is removed

The EasyBuild bootstrap script has been removed (see easybuild-framework PR #4233). Please see the installation page for the suggested methods for installing EasyBuild.

Experimental support for the .yeb easyconfig format is removed

Support for the experimental .yeb easyconfig format has been removed (see easybuild-framework PR #4237). This format allowed easyconfigs to be specified in YAML. However, there has been no recent development of this format and little suggestion that anyone was using it.

Deprecated functionality in EasyBuild v5.0

Some functionality is being deprecated in EasyBuild v5.0, and will no longer be supported in EasyBuild v6.0:

If you trigger any deprecated functionality, a warning message will be printed. module

easybuild-framework PR #4229

The following table lists the changes required to replace imports from the the py2vs3 module.

from import ... Replacement
ascii_letters from string import ascii_letters
ascii_lowercase from string import ascii_lowercase
build_opener from urllib.request import build_opener
ConfigParser from configparser import ConfigParser
configparser import configparser
create_base_metaclass from easybuild.base.wrapper import create_base_metaclass
extract_method_name No import required. Replace extract_method_name(method) with '_'.join(method.__code__.co_names)
HTMLParser from html.parser import HTMLParser
HTTPError from urllib.request import HTTPError
HTTPSHandler from urllib.request import HTTPSHandler
json_loads from json import loads and rename json_loads to loads
Mapping from import Mapping
mk_wrapper_baseclass from easybuild.base.wrapper import mk_wrapper_baseclass
OrderedDict from collections import OrderedDict
raise_with_traceback No import required. Replace raise_with_traceback(exception, message, tb) with raise exception(message).with_traceback(tb)
reload from importlib import reload
Request from urllib.request import Request
string_type No import required. Use str directly.
StringIO from io import StringIO
std_urllib import urllib.request as std_urllib
subprocess_popen_text from import subprocess_popen_text
subprocess_terminate from import subprocess_terminate
urlencode from urllib.parse import urlencode
URLError from urllib.request import URLError
urlopen from urllib.request import urlopen

Last update: July 5, 2023