April and May 2024 Releases

The April and May 2024 releases included updates to conda and conda-build! ๐ All of these new releases have been released to both main and conda-forge.
Changes in Conda 24.4.0 and 24.5.0โ
To update conda to the latest version, run:
conda install -n base conda=24.5.0
Per conda's release schedule (CEP 8) there is an expected and official release every two months; occasionally however, new features may be added that are significant enough to warrant a separate release in between the bimonthly cadence. The April 2024 release of conda introduces a new enhancement for Windows users. Specifically, the stub executables used for Python entrypoints in packages are now codesigned as a result of pull request #13721.
Amongst other updates, the most recent 24.5.0 version of conda enables MSYS2 packages to utilize upstream installation prefixes, adds support for
CEP-15 base_url field in repodata.json, and allows specification of channel URLs using a glob-like wildcard pattern in custom channel settings
(e.g., for user with auth handler plugins). See the list below or the release notes for more details.
โจ What's New? โจโ
- Report which
MatchSpecitem causedInvalid*Specexceptions for more informative error messages. - Remove
setuptoolsremainings (MANIFEST.in,wheelbuild dependency) not required since the move tohatchin pull request #12509. - Remove and update any imports inside conda that is importing from
conda/exports.py.
๐ง What Got Fixed? ๐งโ
- Fix
conda notices --jsonto correctly output JSON. - Fix prefix replacement for Windows
subdiron Unix.
๐ What's Marked for Deprecation? ๐ โ
conda.activate._Activator.add_export_unset_vars(useconda.activate._Activator.get_export_unset_varsinstead)conda.activate._Activator.get_scripts_export_unset_vars(useget_scripts_export_unset_varshelper function intest_activate.pyinstead)conda.activate._Activator._get_path_dirs(extra_library_bin)conda.activate.JSONFormatMixin.get_scripts_export_unset_vars(useconda.activate._Activator.get_export_unset_varsinstead)conda.auxlib.collection.make_immutable(usefrozendict.deepfreezeinstead)conda.gateways.logging.trace(useLogger.log(conda.common.constants.TRACE, msg)instead)conda.planas an entrypointconda.plan.add_defaults_to_specsconda.plan.add_unlinkconda.plan.display_actionsconda.plan.execute_actionsconda.plan.execute_instructionsconda.plan.execute_planconda.plan._get_best_prec_match(useconda.misc._get_best_prec_matchinstead)conda.plan.get_blank_actionsconda.plan._handle_menuinstconda.plan._inject_UNLINKLINKTRANSACTIONconda.plan.install_actionsconda.plan._plan_from_actionsconda.plan.print_distsconda.plan.revert_actions(useconda.cli.install.revert_actionsinstead)conda.plan._update_old_planconda._vendor.frozendict(usefrozendictinstead)conda create --mkdircommandconda install --mkdir(useconda createinstead)
๐ What's New in Documentation? ๐โ
- Add type hints and doc strings to
conda.core.index.
Changes in Conda-Build 24.5.0โ
To update conda-build, run:
conda install -n base conda-build=24.5.0
The May 2024 release of conda-build adds conda_build.metadata._split_line_selector to cache line-selector parsed text, exclusively fetches
lfs files for specific git_ref, and enables CodSpeed benchmarks for select tests. See the list below or the release notes
for more details.
โจ What's New? โจโ
- Add
conda_build.render.open_recipecontext manager to detect the recipe type (file/meta.yaml, directory/recipe, or tarball/package) and properly handling any exit/close behavior. - For Windows users, the stub executables used for Python entrypoints in packages are now codesigned.
- Require
conda >=23.7.0.
๐ง What Got Fixed? ๐งโ
- Fix all CLI arguments to properly initialize
conda.base.context.contextwith parsed arguments. Fixes issue with arguments not being processed (e.g.,--override-channelswas previously ignored).
๐ What's Marked for Deprecation? ๐ โ
- Postpone
conda_build.index.channel_datadeprecation.
The following code was marked as deprecated:
conda_build.config.Config.override_channels(defer toconda.base.context.context.channelsinstead)conda_build.config.noarch_python_build_age_defaultconda_build.conda_interface.add_parser_channels(useconda.cli.helpers.add_parser_channelsinstead)conda_build.conda_interface.add_parser_prefix(useconda.cli.helpers.add_parser_prefixinstead)conda_build.conda_interface.ArgumentParser(useconda.cli.conda_argparse.ArgumentParserinstead)conda_build.conda_interface.binstar_uploadconstant (useconda.base.context.context.binstar_uploadinstead)conda_build.conda_interface.cc_conda_build(useconda.base.context.context.conda_buildinstead)conda_build.conda_interface.cc_platformconstant (useconda.base.context.context.platforminstead)conda_build.conda_interface.Channel(useconda.models.channel.Channelinstead)conda_build.conda_interface.Completerconda_build.conda_interface.configparsermodule (useconfigparserinstead)conda_build.conda_interface.CondaErrorclass (useconda.exceptions.CondaErrorinstead)conda_build.conda_interface.CondaHTTPErrorclass (useconda.exceptions.CondaHTTPErrorinstead)conda_build.conda_interface.CondaSession(useconda.gateways.connection.session.CondaSessioninstead)conda_build.conda_interface.CONDA_VERSIONconstant (useconda.__version__instead)conda_build.conda_interface.contextsingleton (useconda.base.context.contextinstead)conda_build.conda_interface.create_default_packagesconstant (useconda.base.context.context.create_default_packagesinstead)conda_build.conda_interface.default_pythonconstant (useconda.base.context.context.default_pythoninstead)conda_build.conda_interface.determine_target_prefixfunction (useconda.base.context.determine_target_prefixinstead)conda_build.conda_interface.download(useconda.gateways.connection.download.downloadinstead)conda_build.conda_interface.env_path_backup_var_existsconda_build.conda_interface.envs_dirsconstant (useconda.base.context.context.envs_dirsinstead)conda_build.conda_interface.EntityEncoder(useconda.auxlib.entity.EntityEncoderinstead)conda_build.conda_interface.FileMode(useconda.models.enums.FileModeinstead)conda_build.conda_interface.get_conda_build_local_urlclass (useconda.models.channel.get_conda_build_local_urlinstead)conda_build.conda_interface.get_conda_channelfunction (useconda.models.channel.Channel.from_valueinstead)conda_build.conda_interface.get_prefixfunction (useconda.base.context.context.target_prefixinstead)conda_build.conda_interface.get_rc_urlsfunction (useconda.base.context.context.channelsinstead)conda_build.conda_interface.human_bytes(useconda.utils.human_bytesinstead)conda_build.conda_interface.import_modulefunction (useimportlib.import_moduleinstead)conda_build.conda_interface.input(useinputinstead)conda_build.conda_interface.InstalledPackagesconda_build.conda_interface.lchmod(useconda.gateways.disk.link.lchmodinstead)conda_build.conda_interface.LinkErrorclass (useconda.exceptions.LinkErrorinstead)conda_build.conda_interface.LockErrorclass (useconda.exceptions.LockErrorinstead)conda_build.conda_interface.MatchSpec(useconda.models.match_spec.MatchSpecinstead)conda_build.conda_interface.non_x86_linux_machinesconstant (useconda.base.context.non_x86_machinesinstead)conda_build.conda_interface.NoPackagesFound(useconda.exceptions.ResolvePackageNotFoundinstead)conda_build.conda_interface.NoPackagesFoundErrorclass (useconda.exceptions.NoPackagesFoundErrorinstead)conda_build.conda_interface.normalized_version(useconda.models.version.normalized_versioninstead)conda_build.conda_interface.osmodule (useosinstead)conda_build.conda_interface.PackageRecord(useconda.models.records.PackageRecordinstead)conda_build.conda_interface.PaddingErrorclass (useconda.exceptions.PaddingErrorinstead)conda_build.conda_interface.partialfunction (usefunctools.partialinstead)conda_build.conda_interface.PathType(useconda.models.enums.PathTypeinstead)conda_build.conda_interface.pkgs_dirsconstant (useconda.base.context.context.pkgs_dirsinstead)conda_build.conda_interface.prefix_placeholder(useconda.base.constants.PREFIX_PLACEHOLDERinstead)conda_build.conda_interface.ProgressiveFetchExtractclass (useconda.core.package_cache.ProgressiveFetchExtractinstead)conda_build.conda_interface.reset_contextfunction (useconda.base.context.reset_contextinstead)conda_build.conda_interface.Resolve(useconda.resolve.Resolveinstead)conda_build.conda_interface.rm_rf(useconda_build.utils.rm_rfinstead)conda_build.conda_interface.root_dirconstant (useconda.base.context.context.root_prefixinstead)conda_build.conda_interface.root_writableconstant (useconda.base.context.context.root_writableinstead)conda_build.conda_interface.spec_from_line(useconda.cli.common.spec_from_lineinstead)conda_build.conda_interface.specs_from_args(useconda.cli.common.specs_from_argsinstead)conda_build.conda_interface.specs_from_url(useconda.cli.common.specs_from_urlinstead)conda_build.conda_interface.StringIO(useio.StringIOinstead)conda_build.conda_interface.subdirconstant (useconda.base.context.context.subdirinstead)conda_build.conda_interface.symlink_condaconda_build.conda_interface.TempDirectory(useconda.gateways.disk.create.TemporaryDirectoryinstead)conda_build.conda_interface.TmpDownload(useconda.gateways.connection.download.TmpDownloadinstead)conda_build.conda_interface.toposort(useconda.common.toposort._toposortinstead)conda_build.conda_interface.unix_path_to_win(useconda.utils.unix_path_to_wininstead)conda_build.conda_interface.Unsatisfiable(useconda.exceptions.UnsatisfiableErrorinstead)conda_build.conda_interface.untracked(useconda.misc.untrackedinstead)conda_build.conda_interface.UnsatisfiableErrorclass (useconda.exceptions.UnsatisfiableErrorinstead)conda_build.conda_interface.url_path(useconda.utils.url_pathinstead)conda_build.conda_interface.VersionOrder(useconda.models.version.VersionOrderinstead)conda_build.conda_interface.walk_prefix(useconda.misc.walk_prefixinstead)conda_build.conda_interface.win_path_to_unix(useconda.common.path.win_path_to_unixinstead)conda_build.utils.HashableDict(usefrozendict.deepfreezeinstead)conda_build.utils._convert_lists_to_sets(usefrozendict.deepfreezeinstead)conda_build.utils.represent_hashabledict(usefrozendict.deepfreezeinstead)conda_build.variants.get_vars(loop_only)
The following code was removed:
conda_build.api.get_output_file_path(useconda_build.api.get_output_file_pathsinstead)conda_build.bdist_condaconda_build.build.have_prefix_filesconda_build.conda_interface.get_index(useconda.core.index.get_indexinstead)conda_build.conda_interface.get_version_from_git_tag(useconda_build.environ.get_version_from_git_taginstead)conda_build.conda_interface.handle_proxy_407Handled byconda.gateways.connection.session.CondaSessionconda_build.conda_interface.hashsum_file(useconda.gateways.disk.read.compute_suminstead)conda_build.conda_interface.md5_file(useconda.gateways.disk.read.compute_sum(path, 'md5')instead)conda_build.environ._load_all_jsonconda_build.environ._load_jsonconda_build.environ.cached_actionsconda_build.environ.Environment(useconda.core.prefix_data.PrefixDatainstead)conda_build.environ.InvalidEnvironmentconda_build.environ.LINK_ACTIONconda_build.environ.PREFIX_ACTIONconda_build.index._apply_instructions(useconda_index._apply_instructionsinstead)conda_build.index.DummyExecutorconda_build.index.LOCK_TIMEOUT_SECSconda_build.index.LOCKFILE_NAMEconda_build.index.MAX_THREADS_DEFAULT
We โค๏ธ Our Communityโ
Altogether, we had 6 new contributors this release cycle; thank you to all of our open source community members for helping making these improvements possible.
- @Callek made their first contribution in conda #13721
- @dwr-psandhu made their first contribution in conda #13770
- @ifitchet made their first contribution in conda #13649
- @Nathann03 made their first contribution in conda #13816
- @Tobias-Fischer made their first contribution in conda-build #5202
- @ytausch made their first contribution in conda-build #5214
If you have ideas or want to help improve any of the conda community projects, we love to see new (and returning) contributors! ๐
