跳到主要内容

2024 年 9 月发布

·9 分钟阅读
Mahe Iram Khan
Conda 维护者

2024 年 9 月的发布包括对 conda、conda-build 和 conda-libmamba-solver 的更新!🎉 所有这些都已发布到 mainconda-forge 频道。

Conda 的变更 24.9.0/24.9.1

要更新 conda,请运行

conda install -n base conda=24.9.1

✨ 特别公告 ✨

这是一项关于 conda 功能中重要的和积极的未来变化的公告

根据 conda 用户关于 conda 代码库预配置为偏向 Anaconda Inc 频道的反馈,我们已经开始弃用在 conda 源代码中硬编码 Anaconda 频道作为默认频道集的过程,这是 conda 在该公司孵化遗留下来的。

未来,我们将依赖 conda 发行版的提供商,例如 miniforge 或 Anaconda(包括 miniconda),来预配置他们首选的频道,例如通过运行必要的 conda config --set channels 命令。

我们还将继续致力于改进频道管理在可预见的未来,并希望得到您的反馈。

✨ 新增功能? ✨

  • 添加 conda.core.index.Index 作为已实现字典索引的更快的即插即用替代品。注意:在获取索引时,记录器不再隐式初始化。相反,您必须显式调用 conda.gateways.logging.initialize_logging
  • conda env remove 命令别名为 conda remove --all
  • conda doctor 添加新的健康检查,以检测 REQUESTS_CA_BUNDLE 环境变量是否指向不存在的文件。
  • conda list --explicit 添加 --sha256 标志,以便它列出带有 SHA256 哈希而不是 MD5 的 URL,并使 conda install|create 与这些输入兼容。
  • 报告用于生成 @EXPLICIT 文本文件的 conda 版本。
  • 更新健康检查输出以保持一致性。
  • 修复 Windows 到 Unix 路径转换以处理 UNC 挂载和根路径。
  • 添加新的 denylist_channels 配置选项和 CONDA_DENYLIST_CHANNELS 环境变量,以显式拒绝全局使用特定频道,这是对已存在的 allowlist_channels 配置选项的补充。
  • 添加 conda commands 子命令。
  • 添加 conda.testing.fixtures.session_capsys。使用它来捕获模块、包和会话范围内的 fixtures 中的 stdout 和 stderr。
  • 添加 conda.testing.fixtures.session_conda_cli。使用它来在模块、包和会话范围内的 fixtures 中调用 conda 命令。
  • 添加 conda.testing.fixtures.session_tmp_env。使用它来在模块、包和会话范围内的 fixtures 中创建 conda 环境。

🔧 修复了什么? 🔧

  • 防止包含 conda 环境的目录在创建新环境时被指定为环境前缀;这提供了针对通过 conda rename 等命令意外删除环境的保护措施。
  • 启用 conda doctor 以在尝试生成健康报告之前检查环境是否存在。
  • 修复 conda.common.configuration.ObjectParameter 适当处理默认值的能力。
  • conda remove [env] --all 命令不再删除已移除环境的空父目录。
  • 尝试删除不存在的环境时引发错误。
  • 向激活子命令(activatedeactivatereactivatehookscommands)添加 pre-/post-command 钩子。
  • 仅从文件名末尾替换扩展名,而不是 str.replace(),在两个地方。
  • 修复 PowerShell 激活/停用以使用 $Env:VARIABLE = $null 而不是 $Env:VARIABLE = "" 正确取消设置环境变量。
  • (24.9.1) 微调即将到来的频道默认值更改的待定弃用警告。

🌅 哪些被弃用或标记为未来弃用? 🌅

  • conda.core.index.get_index 标记为待定弃用。请改用 conda.core.index.Index
  • conda.core.index.get_reduced_index 标记为待定弃用。请改用 conda.core.index.ReducedIndex
  • conda.core.index.fetch_index 标记为待定弃用。请改用 conda.core.index.Index
  • conda.core.index._supplement_index_with_prefix 标记为待定弃用。请改用 conda.core.index.Index.reload
  • conda.core.index._supplement_index_with_cache 标记为待定弃用。请改用 conda.core.index.Index.reload
  • conda.core.index._supplement_index_with_features 标记为待定弃用。请改用 conda.core.index.Index.reload
  • conda.core.index._supplement_index_with_system 标记为待定弃用。请改用 conda.core.index.Index.reload
  • conda.core.index._make_virtual_package 标记为待定弃用。请改用 conda.models.records.PackageRecord.virtual_package
  • conda.core.subdir_data.make_feature_record 标记为待定弃用。请改用 conda.models.records.PackageRecord.feature
  • conda.plugins.manager.CondaPluginManager.get_virtual_packages 标记为待定弃用。请改用 conda.plugins.manager.CondaPluginManager.get_virtual_package_records
  • conda.misc.explicit(index_args) 标记为待定弃用。
  • conda.cli.main_rename.validate_destination 标记为待定弃用。请改用 conda.cli.install.validate_new_prefix
  • conda.cli.main_env_remove.execute 标记为待定弃用。请改用 conda.cli.main_remove.execute
  • conda.activate.path_identity 标记为待定弃用。请改用 conda.common.path.path_identity
  • conda.utils.path_identity 标记为待定弃用。请改用 conda.common.path.path_identity
  • conda.models.leased_path_entry 标记为待定弃用。
  • conda.base.context.Context.conda_exe 的移除推迟到 conda 25.3
  • conda.cli.python_api 的移除推迟到 conda 25.9
  • 移除 conda._vendor.appdirs。请改用 platformdirs
  • 移除 conda._vendor.cpuinfo
  • 移除 conda._vendor.distro。请改用 distro
  • 移除 conda.auxlib.collection.call_each
  • 移除 conda.auxlib.collection.firstitem
  • 移除 conda.auxlib.compat.NoneType
  • 移除 conda.auxlib.compat.primitive_types
  • 移除 conda.auxlib.compat.utf8_writer
  • 移除 conda.auxlib.exceptions.AssignmentError
  • 移除 conda.auxlib.exceptions.AuthenticationError
  • 移除 conda.auxlib.exceptions.InitializationError
  • 移除 conda.auxlib.exceptions.NotFoundError
  • 移除 conda.auxlib.exceptions.SenderError
  • 移除 conda.auxlib.type_coercion.boolify_truthy_string_ok
  • 移除 conda.auxlib.type_coercion.listify
  • 移除 conda.base.context.Context.root_dir。请改用 conda.base.context.Context.root_prefix
  • 移除 conda.base.exceptions
  • 移除 conda.cli.main.generate_parser。请改用 conda.cli.conda_argparse.generate_parser
  • 移除 conda.cli.main.init_loggers(context)
  • 移除 conda.cli.main_rename.validate_src(name)
  • 移除 conda.cli.main_rename.validate_src(prefix)
  • 移除 conda.common.configuration.load_file_configs
  • 移除 conda.common.decorators.env_override
  • 移除 conda.common.decorators
  • 移除 conda.common.disk.temporary_content_in_file。请改用 tempfile
  • 移除 conda.core.package_cache_data.download。请改用 conda.gateways.connection.download.download
  • 移除 conda.core.package_cache_data.rm_fetched
  • 移除 conda.core.package_cache。请改用 conda.core.package_cache_data
  • 移除 conda.core.prefix_data.PrefixData._has_python
  • 移除 conda.core.subdir_data.get_cache_control_max_age。请改用 conda.gateways.repodata.get_cache_control_max_age
  • 移除 conda.exports.fetch_index。请改用 conda.core.index.fetch_index
  • 移除 conda.exports.IndexRecord。请改用 conda.models.records.PackageRecord
  • 移除 conda.gateways.anaconda_client.EnvAppDirs。请改用 platformdirs
  • 移除 conda.gateways.connection.adapters.ftp.FTPAdapter.stor
  • 移除 conda.gateways.connection.adapters.ftp.parse_multipart_files
  • 移除 conda.gateways.logging.set_verbosity。请改用 conda.gateways.logging.set_log_level
  • 移除 conda.gateways.logging.VERBOSITY_LEVELS
  • 移除 conda.models.dist.IndexRecord。请改用 conda.models.records.PackageRecord
  • 移除 conda.models.enums.LeasedPathType
  • 移除 conda.models.leased_path_entry.LeasedPathEntry
  • 移除 conda.plugins.subcommands.doctor.get_prefix。请改用 conda.base.context.context.target_prefix
  • 移除 conda.plugins.subcommands.doctor.health_checks.display_health_checks
  • 移除 conda.plugins.subcommands.doctor.health_checks.display_report_heading
  • 移除 conda.testing.helpers.set_active_prefix。请改用 mocker.patch('conda.base.context.Context.active_prefix')
  • 移除 tests.env.utils.run_command。请改用 conda_cli fixture。
  • tests.env.utils.make_temp_envs_dir 标记为待定弃用。请改用 tmp_envs_dir fixture。
  • conda.gateways.disk.delete.rm_rf(max_retries) 标记为待定弃用。
  • conda.gateways.disk.delete.rm_rf(trash) 标记为待定弃用。
  • conda.gateways.disk.delete.try_rmdir_all_empty 标记为待定弃用。请改用 conda.gateways.disk.delete.rm_rf
  • conda.gateways.disk.delete.move_to_trash 标记为待定弃用。请改用 conda.gateways.disk.delete.rm_rf
  • conda.gateways.disk.delete.move_path_to_trash 标记为待定弃用。请改用 conda.gateways.disk.delete.rm_rf
  • conda.exports.move_to_trash 标记为待定弃用。请改用 conda.gateways.disk.delete.rm_rf
  • conda.activate.ensure_binary 标记为待定弃用。请改用 conda.common.compat.ensure_binary
  • conda.activate.ensure_fs_path_encoding 标记为待定弃用。
  • conda.common.compat.six_with_metaclass 标记为待定弃用。请改用 class 的 metaclass= 关键字参数。
  • conda.common.compat.open 标记为待定弃用。请改用 conda.common.compat.open_utf8
  • conda.common.compat.ensure_unicode 标记为待定弃用。
  • conda.common.compat.ensure_fs_path_encoding 标记为待定弃用。
  • conda.common.compat.FILESYSTEM_ENCODING 标记为待定弃用。
  • conda.activate.native_path_to_unix 标记为待定弃用。请改用 conda.common.path.win_path_to_unix
  • conda.activate.unix_path_to_native 标记为待定弃用。请改用 conda.common.path.unix_path_to_win
  • conda.activate._Cygpath 标记为待定弃用。请改用 conda.common.path._cygpath
  • conda.activate._Cygpath.RE_UNIX 标记为待定弃用。请改用 conda.common.path._cygpath.RE_WIN_DRIVE
  • conda.activate._Cygpath.translate_unix 标记为待定弃用。请改用 conda.common.path._cygpath._to_unix_drive
  • conda.activate._Cygpath.RE_DRIVE 标记为待定弃用。请改用 conda.common.path._cygpath.RE_UNIX_DRIVE
  • conda.activate._Cygpath.translation_drive 标记为待定弃用。请改用 conda.common.path._cygpath._to_win_drive
  • conda.activate._Cygpath.RE_MOUNT 标记为待定弃用。请改用 conda.common.path._cygpath.RE_UNIX_MOUNT
  • conda.activate._Cygpath.translation_mount 标记为待定弃用。请改用 conda.common.path._cygpath._to_win_mount
  • conda.activate._Cygpath.RE_ROOT 标记为待定弃用。请改用 conda.common.path._cygpath.RE_UNIX_ROOT
  • conda.activate._Cygpath.translation_root 标记为待定弃用。请改用 conda.common.path._cygpath._to_win_root
  • conda.utils.unix_path_to_win 标记为待定弃用。请改用 conda.common.path.unix_path_to_win
  • 弃用 conda.env.specs.binstar 模块。
  • 弃用 conda env [create|update] REMOTE_DEFINITION。请改用 conda env [create|update] --file=URL
  • conda.testing.integration.BIN_DIRECTORY 标记为待定弃用。请改用 conda.common.path.BIN_DIRECTORY
  • conda.common.path.get_bin_directory_short_path() 标记为待定弃用。请改用 conda.common.path.BIN_DIRECTORY
  • conda.common.path.is_private_env_name 标记为待定弃用。
  • conda.common.path.is_private_env_path 标记为待定弃用。
  • conda shell.SHELL commands 标记为待定弃用。请改用 conda commands
  • defaults 多频道将不再是 channels 的(隐式)默认值。鼓励依赖此行为的用户运行 conda config --add channels defaults。这是待定弃用,将在 25.3 中完全弃用。
  • 当隐式添加 defaults 时,conda config --add/--append channels ... 将发出警告。在 conda 25.3 中,此行为将被移除,如果需要,用户应显式运行 conda config --add/--append channels defaults。像 miniforge 或 miniconda 这样的 Conda 发行版安装程序将在安装期间预配置 conda 频道。
  • 如果没有显式的 channels 配置(通过 condarc 文件、环境变量或 CLI 标志),conda 将警告隐式使用 defaults。在 25.3 中,将使用空列表。
  • restore_free_channel 配置选项标记为待定弃用。在 defaults 之后将 https://repo.anaconda.com/pkgs/free 添加到您的频道列表。
  • conda.testing.CondaCLIFixture 标记为待定弃用。请改用 conda.testing.fixtures.CondaCLIFixture
  • conda.testing.conda_cli 标记为待定弃用。请改用 conda.testing.fixtures.conda_cli
  • conda.testing.PathFactoryFixture 标记为待定弃用。请改用 conda.testing.fixtures.PathFactoryFixture
  • conda.testing.path_factory 标记为待定弃用。请改用 conda.testing.fixtures.path_factory
  • conda.testing.TmpEnvFixture 标记为待定弃用。请改用 conda.testing.fixtures.TmpEnvFixture
  • conda.testing.tmp_env 标记为待定弃用。请改用 conda.testing.fixtures.tmp_env
  • conda.testing.TmpChannelFixture 标记为待定弃用。请改用 conda.testing.fixtures.TmpChannelFixture
  • conda.testing.tmp_channel 标记为待定弃用。请改用 conda.testing.fixtures.tmp_channel
  • conda.testing.context_aware_monkeypatch 标记为待定弃用。请改用 conda.testing.fixtures.context_aware_monkeypatch
  • conda.testing.tmp_pkgs_dir 标记为待定弃用。请改用 conda.testing.fixtures.tmp_pkgs_dir
  • conda.testing.tmp_envs_dir 标记为待定弃用。请改用 conda.testing.fixtures.tmp_envs_dir
  • (24.9.1) 移除已弃用的测试入口点 shell/bin/conda。请改用 dev/start[.bat]

📄 文档中的新增功能? 📄

  • 记录 conda [env] create--platform 标志。

其他

  • 更新 xonsh 支持以适应已弃用的导入路径。

Conda-Build 的变更 24.9.0

要更新 conda-build,请运行

conda install -n base conda-build=24.9.0

✨ 新增功能? ✨

  • 当存在大量未使用的变体时,减少渲染时间。

🔧 修复了什么? 🔧

  • 确保在 script_env 中提到的变量在多输出构建环境中未定义,如果它们在调用 conda-build 的环境中未定义。
  • 在单行 jinja2 forset 语句中使用的变量现在已正确包含在某些边缘情况的变体矩阵中。
  • 当特定元数据块评估为跳过时,允许未定义的 jinja 变量。

🌅 哪些被弃用或标记为未来弃用? 🌅

  • 移除 conda_build.build.check_externalpatchelf 是 Linux 上的显式 conda-build 依赖项,因此它将始终安装。
  • 移除 conda_build.metadata._get_env_path。请改用 conda.base.context.locate_prefix_by_name
  • 移除 conda_build.build._construct_metadata_for_test_from_recipe。测试已构建的包,而不是配方(例如,conda build --test package 而不是 conda build --test recipe/)。

Conda-Libmamba-Solver 的变更 24.9.0

要更新 conda-libmamba-solver,请运行

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

🔧 修复了什么? 🔧

  • 使用 Solver 实例配置来初始化 libmamba 上下文,而无需隐式依赖 conda 上下文设置。
  • 修复 conda-build 兼容性回归,其中如果首先构建了 noarch 输出,则无法在测试阶段找到特定于架构的输出。

📄 文档中的新增功能? 📄

  • 添加带有 conda-standalone 的安装解决方法 FAQ。
  • 更新用户指南以反映 conda-libmamba-solver 是 conda 中的默认 solver。
  • 包括 mamba-org/mamba 作为设置开发环境所需的克隆存储库。

我们 ❤️ 我们的社区

总共,在这个发布周期我们有 4 位新的贡献者;感谢我们所有的开源社区成员帮助实现这些改进。