Skip to main content

September 2024 Releases

ยท 9 min read
Mahe Iram Khan
Conda Maintainer

The September 2024 releases included updates to conda, conda-build, and conda-libmamba-solver! ๐ŸŽ‰ All of these have been released to both main and conda-forge channels.

Changes in Conda 24.9.0/24.9.1โ€‹

To update conda, run:

conda install -n base conda=24.9.1

โœจ Special announcement โœจโ€‹

This is an announcement about an important and positive future change in conda's functionality:

Following feedback from conda users about the pre-configuration of the conda code base to favor channels from Anaconda Inc, we've started the process to deprecate hardcoding Anaconda's channels as the default set of channels in the conda source code, which is a remnant of conda's incubation at the company.

In the future, we will rely on providers of conda distributions, such as miniforge or Anaconda (including miniconda), to pre-configure their preferred channels, e.g. by running the necessary conda config --set channels command.

We're also going to continue to work on improving channel management in the foreseeable future and would love to get your feedback.

โœจ What's New? โœจโ€‹

  • Add conda.core.index.Index as a faster drop-in replacement of the realized dictionary index. Note: The loggers are no longer implicitly initialized when fetching the index. Instead, you must explicitly call conda.gateways.logging.initialize_logging.
  • Alias conda env remove command to conda remove --all.
  • Add a new health check to conda doctor that detects if the REQUESTS_CA_BUNDLE env var points to a non-existent file.
  • Add --sha256 flag to conda list --explicit so it lists URLs with a SHA256 hash instead of MD5 and make conda install|create compatible with these inputs.
  • Report conda version used to generate a @EXPLICIT text file.
  • Update health checks outputs for consistency.
  • Fix Windows to Unix path conversion to handle UNC mounts and root paths.
  • Add a new denylist_channels config option and CONDA_DENYLIST_CHANNELS environment variable to explicitly deny using specific channels globally, which is complementing the already existing allowlist_channels config option.
  • Add conda commands subcommand.
  • Add conda.testing.fixtures.session_capsys. Use this to capture stdout and stderr within module, package, and session scoped fixtures.
  • Add conda.testing.fixtures.session_conda_cli. Use this to invoke conda commands within module, package, and session scoped fixtures.
  • Add conda.testing.fixtures.session_tmp_env. Use this to create a conda environment within module, package, and session scoped fixtures.

๐Ÿ”ง What Got Fixed? ๐Ÿ”งโ€‹

  • Prevent directories that contain conda environments from being specified as an environment prefix when creating new envs; this provides guardrails against the accidental deletion of environments via commands such as conda rename.
  • Enable conda doctor to check whether the environment exists or not before trying to generate a health report.
  • Fix conda.common.configuration.ObjectParameter's ability to appropriately handle defaults.
  • conda remove [env] --all command no longer deletes empty parent directories for environments that are removed.
  • Raise an error when attempting to remove non-existent environment.
  • Add pre-/post-command hooks to activation subcommands (activate, deactivate, reactivate, hooks, and commands).
  • Replace extensions from end of filename only, not str.replace(), in two places.
  • Fix PowerShell activation/deactivation to properly unset environment variables using $Env:VARIABLE = $null instead of $Env:VARIABLE = "".
  • (24.9.1) Tweak pending deprecation warning for the upcoming changes in channel defaults.

๐ŸŒ… What Got Deprecated or Got Marked for Future Deprecation? ๐ŸŒ…โ€‹

  • Mark conda.core.index.get_index as pending deprecation. Use conda.core.index.Index instead.
  • Mark conda.core.index.get_reduced_index as pending deprecation. Use conda.core.index.ReducedIndex instead.
  • Mark conda.core.index.fetch_index as pending deprecation. Use conda.core.index.Index instead.
  • Mark conda.core.index._supplement_index_with_prefix as pending deprecation. Use conda.core.index.Index.reload instead.
  • Mark conda.core.index._supplement_index_with_cache as pending deprecation. Use conda.core.index.Index.reload instead.
  • Mark conda.core.index._supplement_index_with_features as pending deprecation. Use conda.core.index.Index.reload instead.
  • Mark conda.core.index._supplement_index_with_system as pending deprecation. Use conda.core.index.Index.reload instead.
  • Mark conda.core.index._make_virtual_package as pending deprecation. Use conda.models.records.PackageRecord.virtual_package instead.
  • Mark conda.core.subdir_data.make_feature_record as pending deprecation. Use conda.models.records.PackageRecord.feature instead.
  • Mark conda.plugins.manager.CondaPluginManager.get_virtual_packages as pending deprecation. Use conda.plugins.manager.CondaPluginManager.get_virtual_package_records instead.
  • Mark conda.misc.explicit(index_args) as pending deprecation.
  • Mark conda.cli.main_rename.validate_destination as pending deprecation. Use conda.cli.install.validate_new_prefix instead.
  • Mark conda.cli.main_env_remove.execute as pending deprecation. Use conda.cli.main_remove.execute instead.
  • Mark conda.activate.path_identity as pending deprecation. Use conda.common.path.path_identity instead.
  • Mark conda.utils.path_identity as pending deprecation. Use conda.common.path.path_identity instead.
  • Mark conda.models.leased_path_entry as pending deprecation.
  • Postpone removal of conda.base.context.Context.conda_exe to conda 25.3.
  • Postpone removal of conda.cli.python_api to conda 25.9.
  • Remove conda._vendor.appdirs. Use platformdirs instead.
  • Remove conda._vendor.cpuinfo.
  • Remove conda._vendor.distro. Use distro instead.
  • Remove conda.auxlib.collection.call_each.
  • Remove conda.auxlib.collection.firstitem.
  • Remove conda.auxlib.compat.NoneType.
  • Remove conda.auxlib.compat.primitive_types.
  • Remove conda.auxlib.compat.utf8_writer.
  • Remove conda.auxlib.exceptions.AssignmentError.
  • Remove conda.auxlib.exceptions.AuthenticationError.
  • Remove conda.auxlib.exceptions.InitializationError.
  • Remove conda.auxlib.exceptions.NotFoundError.
  • Remove conda.auxlib.exceptions.SenderError.
  • Remove conda.auxlib.type_coercion.boolify_truthy_string_ok.
  • Remove conda.auxlib.type_coercion.listify.
  • Remove conda.base.context.Context.root_dir. Use conda.base.context.Context.root_prefix instead.
  • Remove conda.base.exceptions.
  • Remove conda.cli.main.generate_parser. Use conda.cli.conda_argparse.generate_parser instead.
  • Remove conda.cli.main.init_loggers(context).
  • Remove conda.cli.main_rename.validate_src(name).
  • Remove conda.cli.main_rename.validate_src(prefix).
  • Remove conda.common.configuration.load_file_configs.
  • Remove conda.common.decorators.env_override.
  • Remove conda.common.decorators.
  • Remove conda.common.disk.temporary_content_in_file. Use tempfile instead.
  • Remove conda.core.package_cache_data.download. Use conda.gateways.connection.download.download instead.
  • Remove conda.core.package_cache_data.rm_fetched.
  • Remove conda.core.package_cache. Use conda.core.package_cache_data instead.
  • Remove conda.core.prefix_data.PrefixData._has_python.
  • Remove conda.core.subdir_data.get_cache_control_max_age. Use conda.gateways.repodata.get_cache_control_max_age instead.
  • Remove conda.exports.fetch_index. Use conda.core.index.fetch_index instead.
  • Remove conda.exports.IndexRecord. Use conda.models.records.PackageRecord instead.
  • Remove conda.gateways.anaconda_client.EnvAppDirs. Use platformdirs instead.
  • Remove conda.gateways.connection.adapters.ftp.FTPAdapter.stor.
  • Remove conda.gateways.connection.adapters.ftp.parse_multipart_files
  • Remove conda.gateways.logging.set_verbosity. Use conda.gateways.logging.set_log_level instead.
  • Remove conda.gateways.logging.VERBOSITY_LEVELS.
  • Remove conda.models.dist.IndexRecord. Use conda.models.records.PackageRecord instead.
  • Remove conda.models.enums.LeasedPathType.
  • Remove conda.models.leased_path_entry.LeasedPathEntry.
  • Remove conda.plugins.subcommands.doctor.get_prefix. Use conda.base.context.context.target_prefix instead.
  • Remove conda.plugins.subcommands.doctor.health_checks.display_health_checks.
  • Remove conda.plugins.subcommands.doctor.health_checks.display_report_heading.
  • Remove conda.testing.helpers.set_active_prefix. Use mocker.patch('conda.base.context.Context.active_prefix') instead.
  • Remove tests.env.utils.run_command. Use conda_cli fixture instead.
  • Mark tests.env.utils.make_temp_envs_dir as pending deprecation. Use tmp_envs_dir fixture instead.
  • Mark conda.gateways.disk.delete.rm_rf(max_retries) as pending deprecated.
  • Mark conda.gateways.disk.delete.rm_rf(trash) as pending deprecated.
  • Mark conda.gateways.disk.delete.try_rmdir_all_empty as pending deprecated. Use conda.gateways.disk.delete.rm_rf instead.
  • Mark conda.gateways.disk.delete.move_to_trash as pending deprecated. Use conda.gateways.disk.delete.rm_rf instead.
  • Mark conda.gateways.disk.delete.move_path_to_trash as pending deprecated. Use conda.gateways.disk.delete.rm_rf instead.
  • Mark conda.exports.move_to_trash as pending deprecation. Use conda.gateways.disk.delete.rm_rf instead.
  • Mark conda.activate.ensure_binary as pending deprecation. Use conda.common.compat.ensure_binary instead.
  • Mark conda.activate.ensure_fs_path_encoding as pending deprecation.
  • Mark conda.common.compat.six_with_metaclass as pending deprecation. Use class' metaclass= keyword argument instead.
  • Mark conda.common.compat.open as pending deprecation. Use conda.common.compat.open_utf8 instead.
  • Mark conda.common.compat.ensure_unicode as pending deprecation.
  • Mark conda.common.compat.ensure_fs_path_encoding as pending deprecation.
  • Mark conda.common.compat.FILESYSTEM_ENCODING as pending deprecation.
  • Mark conda.activate.native_path_to_unix as pending deprecation. Use conda.common.path.win_path_to_unix instead.
  • Mark conda.activate.unix_path_to_native as pending deprecation. Use conda.common.path.unix_path_to_win instead.
  • Mark conda.activate._Cygpath as pending deprecation. Use conda.common.path._cygpath instead.
  • Mark conda.activate._Cygpath.RE_UNIX as pending deprecation. Use conda.common.path._cygpath.RE_WIN_DRIVE instead.
  • Mark conda.activate._Cygpath.translate_unix as pending deprecation. Use conda.common.path._cygpath._to_unix_drive instead.
  • Mark conda.activate._Cygpath.RE_DRIVE as pending deprecation. Use conda.common.path._cygpath.RE_UNIX_DRIVE instead.
  • Mark conda.activate._Cygpath.translation_drive as pending deprecation. Use conda.common.path._cygpath._to_win_drive instead.
  • Mark conda.activate._Cygpath.RE_MOUNT as pending deprecation. Use conda.common.path._cygpath.RE_UNIX_MOUNT instead.
  • Mark conda.activate._Cygpath.translation_mount as pending deprecation. Use conda.common.path._cygpath._to_win_mount instead.
  • Mark conda.activate._Cygpath.RE_ROOT as pending deprecation. Use conda.common.path._cygpath.RE_UNIX_ROOT instead.
  • Mark conda.activate._Cygpath.translation_root as pending deprecation. Use conda.common.path._cygpath._to_win_root instead.
  • Mark conda.utils.unix_path_to_win as pending deprecation. Use conda.common.path.unix_path_to_win instead.
  • Deprecate conda.env.specs.binstar module.
  • Deprecate conda env [create|update] REMOTE_DEFINITION. Use conda env [create|update] --file=URL instead.
  • Mark conda.testing.integration.BIN_DIRECTORY as pending deprecation. Use conda.common.path.BIN_DIRECTORY instead.
  • Mark conda.common.path.get_bin_directory_short_path() as pending deprecation. Use conda.common.path.BIN_DIRECTORY instead.
  • Mark conda.common.path.is_private_env_name as pending deprecation.
  • Mark conda.common.path.is_private_env_path as pending deprecation.
  • Mark conda shell.SHELL commands as pending deprecation. Use conda commands instead.
  • The defaults multichannel will stop being the (implicit) default value for channels. Users relying on this behavior are encouraged to run conda config --add channels defaults. This is pending deprecation, and will be fully deprecated in 25.3.
  • conda config --add/--append channels ... will warn when defaults is implicitly added. In conda 25.3, this behavior will be removed and users should run conda config --add/--append channels defaults explicitly if needed. Conda distribution installers like miniforge or miniconda will pre-configure conda channels during installation.
  • Without an explicit channels configuration (via condarc files, environment variables, or CLI flags), conda will warn about using defaults implicitly. In 25.3, an empty list will be used.
  • Mark the restore_free_channel configuration option as pending deprecation. Add https://repo.anaconda.com/pkgs/free to your channel list after defaults instead.
  • Mark conda.testing.CondaCLIFixture as pending deprecation. Use conda.testing.fixtures.CondaCLIFixture instead.
  • Mark conda.testing.conda_cli as pending deprecation. Use conda.testing.fixtures.conda_cli instead.
  • Mark conda.testing.PathFactoryFixture as pending deprecation. Use conda.testing.fixtures.PathFactoryFixture instead.
  • Mark conda.testing.path_factory as pending deprecation. Use conda.testing.fixtures.path_factory instead.
  • Mark conda.testing.TmpEnvFixture as pending deprecation. Use conda.testing.fixtures.TmpEnvFixture instead.
  • Mark conda.testing.tmp_env as pending deprecation. Use conda.testing.fixtures.tmp_env instead.
  • Mark conda.testing.TmpChannelFixture as pending deprecation. Use conda.testing.fixtures.TmpChannelFixture instead.
  • Mark conda.testing.tmp_channel as pending deprecation. Use conda.testing.fixtures.tmp_channel instead.
  • Mark conda.testing.context_aware_monkeypatch as pending deprecation. Use conda.testing.fixtures.context_aware_monkeypatch instead.
  • Mark conda.testing.tmp_pkgs_dir as pending deprecation. Use conda.testing.fixtures.tmp_pkgs_dir instead.
  • Mark conda.testing.tmp_envs_dir as pending deprecation. Use conda.testing.fixtures.tmp_envs_dir instead.
  • (24.9.1) Remove deprecated testing entrypoint shell/bin/conda. Use dev/start[.bat] instead.

๐Ÿ“„ What's New in Documentation? ๐Ÿ“„โ€‹

  • Document --platform flag for conda [env] create.

Otherโ€‹

  • Update xonsh support to accommodate deprecated import path.

Changes in Conda-Build 24.9.0โ€‹

To update conda-build, run:

conda install -n base conda-build=24.9.0

โœจ What's New? โœจโ€‹

  • Reduce render time when there is a large number of unused variants.

๐Ÿ”ง What Got Fixed? ๐Ÿ”งโ€‹

  • Ensure variables mentioned in script_env are undefined in the multi-output build environment if they are undefined in the environment that conda-build is invoked from.
  • Variables used in single-line jinja2 for and set statements are now properly included in the variant matrix for some edge cases.
  • Allow undefined jinja variables when a particular metadata block evaluates as skipped.

๐ŸŒ… What Got Deprecated or Got Marked for Future Deprecation? ๐ŸŒ…โ€‹

  • Remove conda_build.build.check_external. patchelf is an explicit conda-build dependency on Linux, so it will always be installed.
  • Remove conda_build.metadata._get_env_path. Use conda.base.context.locate_prefix_by_name instead.
  • Remove conda_build.build._construct_metadata_for_test_from_recipe. Test built packages instead, not recipes (e.g., conda build --test package instead of conda build --test recipe/).

Changes in Conda-Libmamba-Solver 24.9.0โ€‹

To update conda-libmamba-solver, run:

conda install -n base conda-libmamba-solver=24.9.0

๐Ÿ”ง What Got Fixed? ๐Ÿ”งโ€‹

  • Use Solver instance configuration to initialize the libmamba context without implicitly relying on the conda context settings.
  • Fix conda-build compatibility regression where arch-specific outputs can't be found in the test phase if a noarch output was built first.

๐Ÿ“„ What's New in Documentation? ๐Ÿ“„โ€‹

  • Add installation workarounds FAQ with conda-standalone.
  • Update user guide to reflect conda-libmamba-solver being the default solver in conda.
  • Include mamba-org/mamba as a required cloned repository for setting up a dev environment.

We โค๏ธ Our Communityโ€‹

Altogether, we had 4 new contributors this release cycle; thank you to all of our open source community members for helping making these improvements possible.