July 2024 Releases
ยท 8 min read

The July 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.7.0/24.7.1โ
To update conda, run:
conda install -n base conda=24.7.1
โจ What's New? โจโ
- Add a new
reporterssetting for configuring output. - Report traceback of plugin loading errors with verbosity 2 or higher (
-vvor more). - Skip checking for
.pycand.pyofiles in theconda doctor"missing files" health check. - Breaking change
conda list --explicitwill not print authentication details by default. A new flag--authhas been added so folks can opt-in to this behavior. - Print transaction report for
@EXPLICITlockfile installs. - Do not require
-n/--nameor-p/--prefixifconda createis invoked with--dry-run. - Add an
envvars_force_uppercasesetting which defaults toTrue, uppercasing all environment variables (thereby justifyingconda's current behaviour); whenenvvars_force_uppercaseis set toFalse, conda will only save preserved-case variable names. - Alias
conda env listcommand toconda info --envs. - Replace calls to
logger.warnwithlogger.warning.
๐ง What Got Fixed? ๐งโ
- Improve treatment of logger levels.
- Mask authentication details in
conda-meta/*.jsonmetadata. - Mask Anaconda.org tokens in verbose logs.
- Fix parsing error when history file only contains a single commented line.
- Add missing
emscriptenandwasientries to the recognized platforms, andwasm32to the recognized architectures. - Fix checksum comparisons in
conda.gateways.connection.download.download()to be case insensitive. - Fix caching when
repodata.jsoncontains\r\nline endings. - Fix
conda.core.portability.binary_replacenot matching chunks that end with\n. - (24.7.1) Revert increased restrictions on allowed environment name characters. The previously forbidden characters (^, %, !, =, (, ), ) are allowed again until the impact is assessed.
๐ What's Marked for Deprecation? ๐ โ
- Mark
conda.gateways.logging.initialize_root_loggeras pending deprecation. - Mark
conda.cli.main_env_list.executeas pending deprecation. Useconda.cli.main_info.executeinstead. - Revert
--alldeprecation inconda info. - Mark
conda.exports.iteritemsas pending deprecation. Use builtindict.items()instead. - Mark
conda.exports.Completeras pending deprecation. - Mark
conda.exports.InstalledPackagesas pending deprecation. - Mark
conda.exports.KEYSas pending deprecation. - Mark
conda.exports.KEYS_DIRas pending deprecation. - Mark
conda.exports.hash_fileas pending deprecation. - Mark
conda.exports.verifyas pending deprecation. - Mark
conda.exports.symlink_condaas pending deprecation. Useconda.activateinstead. - Mark
conda.exports._symlink_conda_hlpas pending deprecation. Useconda.activateinstead. - Mark
conda.exports.win_conda_bat_redirectas pending deprecation. Useconda.activateinstead. - Mark
conda.utils.win_path_to_cygwinas pending deprecation. Useconda.common.path.win_path_to_unixinstead. - Mark
conda.utils.cygwin_path_to_winas pending deprecation. Useconda.utils.unix_path_to_wininstead. - Mark
conda.utils.translate_streamas pending deprecation. - Mark
conda.utils.unix_shell_baseas pending deprecation. Useconda.activateinstead. - Mark
conda.utils.msys2_shell_baseas pending deprecation. Useconda.activateinstead. - Mark
conda.utils.shellsas pending deprecation. Useconda.activateinstead.
๐ What's New in Documentation? ๐โ
- Clarify proxy server configuration in documentation.
- Add type hints and doc strings to
conda.core.envs_manager. - Add logging overview as deep-dive.
- Update conda cheatsheet text and add it directly to cheatsheet page.
- Add updated cheatsheet PDF download to cheatsheet page.
- Add
ssl_verify: truststoreto the user guide. - Fix the help text of the
satisfied-skip-solveflag. - Add a section explaining how to correctly raise exceptions from a plugin.
- Add new article for configuring
envs_dirsandpkgs_dirs.
Changes in Conda-Build 24.7.0/24.7.1โ
To update conda-build, run:
conda install -n base conda-build=24.7.1
โจ What's New? โจโ
- Skip generating
repodata.json.bz2for local index; generaterepodata.jsononly; requireconda-package-handling >=2.2.0matching conda. - Add new include/exclude sections for glob expressions in multi-output
outputs/files. - Increase performance by using
pickleinstead ofcopy.deepcopy. - Report fully rendered recipe to stdout before the build process starts.
- Validate
run_constraineddependencies to prevent faulty specs reaching final repodata. PIP_*env variables are set when building outputs in multi-output recipes.- Reduce performance overhead of logging.
- Do not generate conda error reports for common exceptions.
- Add
CondaBuildUserErrorexception to replacesys.exitcalls. - Updated the CI to download the MacOSX 10.15 SDK.
๐ง What Got Fixed? ๐งโ
- Include file path in addition to the content when generating the file hash to avoid unwanted caching during linkage analysis.
- Error handling when
LIEFfails is now consistent withpatchelf. - Ensure cross-building recipes select the correct noarch package variants.
- On Linux platforms, prefer the sysroot matching the target_platform when cross-compiling.
- (24.7.1) Check for WSL existence before calling
pathlib.Path.samefile/os.stat.
๐ What's Marked for Deprecation? ๐ โ
- Mark
conda_build.build._construct_metadata_for_test_from_recipeas deprecated. Test built packages instead, not recipes (e.g.,conda build --test packageinstead ofconda build --test recipe/). - Mark
conda_build.build.check_externalfor deprecation.patchelfis an explicit conda-build dependency on Linux so it will always be installed. - Remove the following deprecations:
conda_build.config.Config.override_channels(useconda.base.context.context.channelsinstead).conda_build.config.noarch_python_build_age_default.conda_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_upload(useconda.base.context.context.binstar_uploadinstead).conda_build.conda_interface.cc_conda_build(useconda.base.context.context.conda_buildinstead).conda_build.conda_interface.cc_platform(useconda.base.context.context.platforminstead).conda_build.conda_interface.Channel(useconda.models.channel.Channelinstead).conda_build.conda_interface.Completer.conda_build.conda_interface.configparser(useconfigparserinstead).conda_build.conda_interface.CondaError(useconda.exceptions.CondaErrorinstead).conda_build.conda_interface.CondaHTTPError(useconda.exceptions.CondaHTTPErrorinstead).conda_build.conda_interface.CondaSession(useconda.gateways.connection.session.CondaSessioninstead).conda_build.conda_interface.CONDA_VERSION(useconda.__version__instead).conda_build.conda_interface.context(useconda.base.context.contextinstead).conda_build.conda_interface.create_default_packages(useconda.base.context.context.create_default_packagesinstead).conda_build.conda_interface.default_python(useconda.base.context.context.default_pythoninstead).conda_build.conda_interface.determine_target_prefix(useconda.base.context.determine_target_prefixinstead).conda_build.conda_interface.download(useconda.gateways.connection.download.downloadinstead).conda_build.conda_interface.env_path_backup_var_exists.conda_build.conda_interface.envs_dirs(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_url(useconda.models.channel.get_conda_build_local_urlinstead).conda_build.conda_interface.get_conda_channel(useconda.models.channel.Channel.from_valueinstead).conda_build.conda_interface.get_prefix(useconda.base.context.context.target_prefixinstead).conda_build.conda_interface.get_rc_urls(useconda.base.context.context.channelsinstead).conda_build.conda_interface.human_bytes(useconda.utils.human_bytesinstead).conda_build.conda_interface.import_module(useimportlib.import_moduleinstead).conda_build.conda_interface.input(useinputinstead).conda_build.conda_interface.InstalledPackages.conda_build.conda_interface.lchmod(useconda.gateways.disk.link.lchmodinstead).conda_build.conda_interface.LinkError(useconda.exceptions.LinkErrorinstead).conda_build.conda_interface.LockError(useconda.exceptions.LockErrorinstead).conda_build.conda_interface.MatchSpec(useconda.models.match_spec.MatchSpecinstead).conda_build.conda_interface.non_x86_linux_machines(useconda.base.context.non_x86_machinesinstead).conda_build.conda_interface.NoPackagesFound(useconda.exceptions.ResolvePackageNotFoundinstead).conda_build.conda_interface.NoPackagesFoundError(useconda.exceptions.NoPackagesFoundErrorinstead).conda_build.conda_interface.normalized_version(useconda.models.version.normalized_versioninstead).conda_build.conda_interface.os(useosinstead).conda_build.conda_interface.PackageRecord(useconda.models.records.PackageRecordinstead).conda_build.conda_interface.PaddingError(useconda.exceptions.PaddingErrorinstead).conda_build.conda_interface.partial(usefunctools.partialinstead).conda_build.conda_interface.PathType(useconda.models.enums.PathTypeinstead).conda_build.conda_interface.pkgs_dirs(useconda.base.context.context.pkgs_dirsinstead).conda_build.conda_interface.prefix_placeholder(useconda.base.constants.PREFIX_PLACEHOLDERinstead).conda_build.conda_interface.ProgressiveFetchExtract(useconda.core.package_cache_data.ProgressiveFetchExtractinstead).conda_build.conda_interface.reset_context(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_dir(useconda.base.context.context.root_prefixinstead).conda_build.conda_interface.root_writable(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.subdir(useconda.base.context.context.subdirinstead).conda_build.conda_interface.symlink_conda.conda_build.conda_interface.TemporaryDirectory(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.untracked(useconda.misc.untrackedinstead).conda_build.conda_interface.Unsatisfiable(useconda.exceptions.UnsatisfiableErrorinstead).conda_build.conda_interface.UnsatisfiableError(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.index.channel_data;conda_build.index.get_build_indexreturn value forchannel_datais now alwaysNone.conda_build.metadata.check_circular_dependencies(useconda_build.metadata._check_circular_dependenciesinstead).conda_build.metadata.toposort(useconda_build.metadata.toposort_outputsinstead).conda_build.utils._convert_lists_to_sets(usefrozendict.deepfreezeinstead).conda_build.utils.HashableDict(usefrozendict.deepfreezeinstead).conda_build.utils.represent_hashabledict(usefrozendict.deepfreezeinstead).conda_build.utils.rm_rf(config).conda_build.variants.get_vars(loop_only).
Changes in Conda-Libmamba-Solver 24.7.0โ
To update conda-libmamba-solver, run:
conda install -n base conda-libmamba-solver=24.7.0
โจ What's New? โจโ
- Document development workflows with devcontainers.
- Add DevContainer configurations for local development workflows.
๐ง What Got Fixed? ๐งโ
- Allow wildcards in package names for
conda remove(e.g.conda remove "python-*"). - Avoid duplicate channel listing when using channel-pinned specs like
channel::package. - Fix a performance regression where
.solvrepodata cache files were not being loaded when available. - Do not ignore virtual packages as input specs.
- Pin
libmambapy <2to defend against upcoming API changes.
We โค๏ธ Our Communityโ
Altogether, we had 9 (!) new contributors this release cycle; thank you to all of our open source community members for helping making these improvements possible.
- @carterbox made their first contribution in conda-build#5216
- @DerThorsten made their first contribution in conda#13962
- @erik-whiting made their first contribution in conda#13877
- @kelvinou01 made their first contribution in conda#14044
- @padeoe made their first contribution in conda#12856
- @skupr-anaconda made their first contribution in conda#13946
- @timkpaine made their first contribution in conda-build#4821
- @tl-hbk made their first contribution in conda-libmamba-solver#449
- @zklaus made their first contributions in conda-build#5364 and conda-libmamba-solver#476
If you have ideas or want to help improve any of the conda community projects, we love to see new (and returning) contributors! ๐
