Skip to main content

July 2024 Releases

ยท 7 min read
Bianca Henderson
Conda maintainer ๐Ÿ๐Ÿ“ฆ

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 reporters setting for configuring output.
  • Report traceback of plugin loading errors with verbosity 2 or higher (-vv or more).
  • Skip checking for .pyc and .pyo files in the conda doctor "missing files" health check.
  • Breaking change conda list --explicit will not print authentication details by default. A new flag --auth has been added so folks can opt-in to this behavior.
  • Print transaction report for @EXPLICIT lockfile installs.
  • Do not require -n/--name or -p/--prefix if conda create is invoked with --dry-run.
  • Add an envvars_force_uppercase setting which defaults to True, uppercasing all environment variables (thereby justifying conda's current behaviour); when envvars_force_uppercase is set to False, conda will only save preserved-case variable names.
  • Alias conda env list command to conda info --envs.
  • Replace calls to logger.warn with logger.warning.

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

  • Improve treatment of logger levels.
  • Mask authentication details in conda-meta/*.json metadata.
  • Mask Anaconda.org tokens in verbose logs.
  • Fix parsing error when history file only contains a single commented line.
  • Add missing emscripten and wasi entries to the recognized platforms, and wasm32 to the recognized architectures.
  • Fix checksum comparisons in conda.gateways.connection.download.download() to be case insensitive.
  • Fix caching when repodata.json contains \r\n line endings.
  • Fix conda.core.portability.binary_replace not 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_logger as pending deprecation.
  • Mark conda.cli.main_env_list.execute as pending deprecation. Use conda.cli.main_info.execute instead.
  • Revert --all deprecation in conda info.
  • Mark conda.exports.iteritems as pending deprecation. Use builtin dict.items() instead.
  • Mark conda.exports.Completer as pending deprecation.
  • Mark conda.exports.InstalledPackages as pending deprecation.
  • Mark conda.exports.KEYS as pending deprecation.
  • Mark conda.exports.KEYS_DIR as pending deprecation.
  • Mark conda.exports.hash_file as pending deprecation.
  • Mark conda.exports.verify as pending deprecation.
  • Mark conda.exports.symlink_conda as pending deprecation. Use conda.activate instead.
  • Mark conda.exports._symlink_conda_hlp as pending deprecation. Use conda.activate instead.
  • Mark conda.exports.win_conda_bat_redirect as pending deprecation. Use conda.activate instead.
  • Mark conda.utils.win_path_to_cygwin as pending deprecation. Use conda.common.path.win_path_to_unix instead.
  • Mark conda.utils.cygwin_path_to_win as pending deprecation. Use conda.utils.unix_path_to_win instead.
  • Mark conda.utils.translate_stream as pending deprecation.
  • Mark conda.utils.unix_shell_base as pending deprecation. Use conda.activate instead.
  • Mark conda.utils.msys2_shell_base as pending deprecation. Use conda.activate instead.
  • Mark conda.utils.shells as pending deprecation. Use conda.activate instead.

๐Ÿ“„ 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: truststore to the user guide.
  • Fix the help text of the satisfied-skip-solve flag.
  • Add a section explaining how to correctly raise exceptions from a plugin.
  • Add new article for configuring envs_dirs and pkgs_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.bz2 for local index; generate repodata.json only; require conda-package-handling >=2.2.0 matching conda.
  • Add new include/exclude sections for glob expressions in multi-output outputs/files.
  • Increase performance by using pickle instead of copy.deepcopy.
  • Report fully rendered recipe to stdout before the build process starts.
  • Validate run_constrained dependencies 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 CondaBuildUserError exception to replace sys.exit calls.
  • 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 LIEF fails is now consistent with patchelf.
  • 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_recipe as deprecated. Test built packages instead, not recipes (e.g., conda build --test package instead of conda build --test recipe/).
  • Mark conda_build.build.check_external for deprecation. patchelf is an explicit conda-build dependency on Linux so it will always be installed.
  • Remove the following deprecations:
    • conda_build.config.Config.override_channels (use conda.base.context.context.channels instead).
    • conda_build.config.noarch_python_build_age_default.
    • conda_build.conda_interface.add_parser_channels (use conda.cli.helpers.add_parser_channels instead).
    • conda_build.conda_interface.add_parser_prefix (use conda.cli.helpers.add_parser_prefix instead).
    • conda_build.conda_interface.ArgumentParser (use conda.cli.conda_argparse.ArgumentParser instead).
    • conda_build.conda_interface.binstar_upload (use conda.base.context.context.binstar_upload instead).
    • conda_build.conda_interface.cc_conda_build (use conda.base.context.context.conda_build instead).
    • conda_build.conda_interface.cc_platform (use conda.base.context.context.platform instead).
    • conda_build.conda_interface.Channel (use conda.models.channel.Channel instead).
    • conda_build.conda_interface.Completer.
    • conda_build.conda_interface.configparser (use configparser instead).
    • conda_build.conda_interface.CondaError (use conda.exceptions.CondaError instead).
    • conda_build.conda_interface.CondaHTTPError (use conda.exceptions.CondaHTTPError instead).
    • conda_build.conda_interface.CondaSession (use conda.gateways.connection.session.CondaSession instead).
    • conda_build.conda_interface.CONDA_VERSION (use conda.__version__ instead).
    • conda_build.conda_interface.context (use conda.base.context.context instead).
    • conda_build.conda_interface.create_default_packages (use conda.base.context.context.create_default_packages instead).
    • conda_build.conda_interface.default_python (use conda.base.context.context.default_python instead).
    • conda_build.conda_interface.determine_target_prefix (use conda.base.context.determine_target_prefix instead).
    • conda_build.conda_interface.download (use conda.gateways.connection.download.download instead).
    • conda_build.conda_interface.env_path_backup_var_exists.
    • conda_build.conda_interface.envs_dirs (use conda.base.context.context.envs_dirs instead).
    • conda_build.conda_interface.EntityEncoder (use conda.auxlib.entity.EntityEncoder instead).
    • conda_build.conda_interface.FileMode (use conda.models.enums.FileMode instead).
    • conda_build.conda_interface.get_conda_build_local_url (use conda.models.channel.get_conda_build_local_url instead).
    • conda_build.conda_interface.get_conda_channel (use conda.models.channel.Channel.from_value instead).
    • conda_build.conda_interface.get_prefix (use conda.base.context.context.target_prefix instead).
    • conda_build.conda_interface.get_rc_urls (use conda.base.context.context.channels instead).
    • conda_build.conda_interface.human_bytes (use conda.utils.human_bytes instead).
    • conda_build.conda_interface.import_module (use importlib.import_module instead).
    • conda_build.conda_interface.input (use input instead).
    • conda_build.conda_interface.InstalledPackages.
    • conda_build.conda_interface.lchmod (use conda.gateways.disk.link.lchmod instead).
    • conda_build.conda_interface.LinkError (use conda.exceptions.LinkError instead).
    • conda_build.conda_interface.LockError (use conda.exceptions.LockError instead).
    • conda_build.conda_interface.MatchSpec (use conda.models.match_spec.MatchSpec instead).
    • conda_build.conda_interface.non_x86_linux_machines (use conda.base.context.non_x86_machines instead).
    • conda_build.conda_interface.NoPackagesFound (use conda.exceptions.ResolvePackageNotFound instead).
    • conda_build.conda_interface.NoPackagesFoundError (use conda.exceptions.NoPackagesFoundError instead).
    • conda_build.conda_interface.normalized_version (use conda.models.version.normalized_version instead).
    • conda_build.conda_interface.os (use os instead).
    • conda_build.conda_interface.PackageRecord (use conda.models.records.PackageRecord instead).
    • conda_build.conda_interface.PaddingError (use conda.exceptions.PaddingError instead).
    • conda_build.conda_interface.partial (use functools.partial instead).
    • conda_build.conda_interface.PathType (use conda.models.enums.PathType instead).
    • conda_build.conda_interface.pkgs_dirs (use conda.base.context.context.pkgs_dirs instead).
    • conda_build.conda_interface.prefix_placeholder (use conda.base.constants.PREFIX_PLACEHOLDER instead).
    • conda_build.conda_interface.ProgressiveFetchExtract (use conda.core.package_cache_data.ProgressiveFetchExtract instead).
    • conda_build.conda_interface.reset_context (use conda.base.context.reset_context instead).
    • conda_build.conda_interface.Resolve (use conda.resolve.Resolve instead).
    • conda_build.conda_interface.rm_rf (use conda_build.utils.rm_rf instead).
    • conda_build.conda_interface.root_dir (use conda.base.context.context.root_prefix instead).
    • conda_build.conda_interface.root_writable (use conda.base.context.context.root_writable instead).
    • conda_build.conda_interface.spec_from_line (use conda.cli.common.spec_from_line instead).
    • conda_build.conda_interface.specs_from_args (use conda.cli.common.specs_from_args instead).
    • conda_build.conda_interface.specs_from_url (use conda.cli.common.specs_from_url instead).
    • conda_build.conda_interface.StringIO (use io.StringIO instead).
    • conda_build.conda_interface.subdir (use conda.base.context.context.subdir instead).
    • conda_build.conda_interface.symlink_conda.
    • conda_build.conda_interface.TemporaryDirectory (use conda.gateways.disk.create.TemporaryDirectory instead).
    • conda_build.conda_interface.TmpDownload (use conda.gateways.connection.download.TmpDownload instead).
    • conda_build.conda_interface._toposort (use conda.common.toposort._toposort instead).
    • conda_build.conda_interface.unix_path_to_win (use conda.utils.unix_path_to_win instead).
    • conda_build.conda_interface.untracked (use conda.misc.untracked instead).
    • conda_build.conda_interface.Unsatisfiable (use conda.exceptions.UnsatisfiableError instead).
    • conda_build.conda_interface.UnsatisfiableError (use conda.exceptions.UnsatisfiableError instead).
    • conda_build.conda_interface.url_path (use conda.utils.url_path instead).
    • conda_build.conda_interface.VersionOrder (use conda.models.version.VersionOrder instead).
    • conda_build.conda_interface.walk_prefix (use conda.misc.walk_prefix instead).
    • conda_build.conda_interface.win_path_to_unix (use conda.common.path.win_path_to_unix instead).
    • conda_build.index.channel_data; conda_build.index.get_build_index return value for channel_data is now always None.
    • conda_build.metadata.check_circular_dependencies (use conda_build.metadata._check_circular_dependencies instead).
    • conda_build.metadata.toposort (use conda_build.metadata.toposort_outputs instead).
    • conda_build.utils._convert_lists_to_sets (use frozendict.deepfreeze instead).
    • conda_build.utils.HashableDict (use frozendict.deepfreeze instead).
    • conda_build.utils.represent_hashabledict (use frozendict.deepfreeze instead).
    • 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 .solv repodata cache files were not being loaded when available.
  • Do not ignore virtual packages as input specs.
  • Pin libmambapy <2 to 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.

If you have ideas or want to help improve any of the conda community projects, we love to see new (and returning) contributors! ๐Ÿ˜„