跳至主要内容

2023 年 9 月发布

·阅读时长 6 分钟
Ken Odegard
Conda 维护者

2023 年 9 月发布包含对五个 Conda 社区项目的更新:Conda、Conda-build、Conda-libmamba-solver、Conda-index 和 Pycosat!🎉 这些项目都发布到了 mainconda-forge

Conda 中的变化 23.9.0

要更新 Conda,请运行

conda install -n base conda=23.9.0

📢 特别公告 📢

信息

Conda 的默认求解器将在不久的将来特殊 23.10.0 版本中更改为 conda-libmamba-solver

您现在就可以通过 配置您的 Conda 安装以使用它(例如,通过运行 conda config --set solver libmamba)来从 conda-libmamba-solver 中受益。

当前的“经典”求解器基于 pycosat/Picosat,并将继续作为 Conda 的一部分,并在可预见的将来可用。 回退是可能的并且可用。

有关此更改的更多详细信息以及完整公告,请参阅 conda 23.9.0 变更日志

✨ 新功能 ✨

  • 为 Conda 添加了一个新的“身份验证处理程序”插件挂钩。 查看新的 conda-auth 插件以获取示例。
  • 索引缓存元数据默认情况下是锁定的;现在也提供了一个 --no-lock 选项。
  • 一个新的 context.register_envs 选项可以控制在创建环境时是否在 ~/.conda/environments.txt 中注册环境。 默认值为 true。
  • 新的详细输出详细程度级别(即,旧的调试级别 -vv 现在是 -vvv)。
  • 已将对 truststore 的支持添加到 ssl_verify 配置选项,使 Conda 能够使用操作系统证书存储(需要 Python 3.10 或更高版本)。
  • 现在支持 emscripten-wasm32wasi-wasm32 平台。

🔧 修复问题 🔧

  • conda env create 在使用 pip 依赖项写入磁盘之前检查目录权限。
  • CONDA_SSL_VERIFY=false 时,隐藏 JLAP 的 InsecureRequestWarning,与非 JLAP 行为相匹配。
  • 不再允许使用冒号创建 Conda 环境。
  • 使用 JLAP 和 file:/// URI 时,已修复记录不存在请求的 AttributeError 响应。
  • 为了更清晰的日志,进度条不再显示在非交互式运行中。
  • --json--debug 默认值为 NULL,因此不会覆盖 CONDA_JSONCONDA_DEBUG 环境变量。
  • 已修复 conda remove --all --json 输出。
  • 测试数据已更新,以停止触发安全扫描仪的误报。
  • WSL 上不再出现基本命令(例如,conda info)的性能下降。
  • Conda 现在配置为忽略“Retry-After”标头,以避免此值非常大并导致 Conda 无限期挂起的情况。
  • repodata.info.json 上的 JSONDecodeError 被视为警告,相当于缺少 repodata.info.json
  • 已修复 conda config --show-sources --json 的排序错误。
  • 现在检测到 find_commands 中的 OSError,以解决 Windows 上的错误 PATH 条目。
  • conda env update --prune 仅使用来自 environment.yml 文件的规范,并忽略历史规范。

🌅 标记为 弃用 的内容? 🌅

这是 Conda 第一个移除之前根据 弃用时间表 标记为弃用的代码的版本。 以下是已移除内容的列表

  • conda.another_unicode()
  • conda._vendor.toolz
  • conda._vendor.tqdm
  • conda.auxlib.decorators.memoized
  • conda.base.context.Context.experimental_solver
  • conda.base.context.Context.conda_private
  • conda.base.context.Context.cuda_version
  • conda.base.context.get_prefix()
  • conda.cli.common.ensure_name_or_prefix()
  • --experimental-solver
  • conda.common.cuda
  • conda.common.path.explode_directories(already_split)
  • conda.common.url.escape_channel_url()
  • conda.core.index.check_whitelist()
  • conda.core.solve._get_solver_class()
  • conda.core.subdir_data.read_mod_and_etag()
  • conda.gateways.repodata.RepodataState.load()
  • conda.gateways.repodata.RepodataState.save()
  • conda.lock
  • conda_env.cli.common.stdout_json()
  • conda_env.cli.common.get_prefix()
  • conda_env.cli.common.find_prefix_name()

Conda-Build 中的变化 3.27.0

要更新 Conda-build,请运行

conda install -n base conda-build=3.27.0

✨ 新功能 ✨

  • 已移除 glob2 依赖项。
  • 现在支持 emscripten-wasm32wasi-wasm32 平台。

🔧 修复问题 🔧

  • Conda 命令插件中的导入已延迟到使用该命令时,避免了导入时的副作用。

📄 文档中的新内容 📄

  • 改进了 ~=(兼容性发布)匹配规范的格式。
  • 文档现在阐明了 build 前缀是在 host 前缀之后激活的。
  • 已添加解释说明,指出 Conda-build 应该从基本环境中运行。

Conda-Libmamba-Solver 中的变化 23.9.0/23.9.1

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

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

✨ 新功能 ✨

  • 提高了 notify_conda_outdated 逻辑的性能。
  • Libmamba 的 repoquery 搜索功能现在作为 Conda 子命令插件公开。
  • 已重写 libsolv 任务的创建方式,利用了 libmambaadd_pin 功能(需要 libmambapy >=1.5.1)。
  • 仅名称的固定现在会锁定已安装的相应软件包。
  • 如果可用且最近,将使用 repodata 的 .solv 缓存。

🔧 修复问题 🔧

  • 求解器在连续两次运行相同的命令时不再在两个兼容的解决方案之间跳动。
  • 没有传递通道的命令得到优雅地处理。
  • 已添加解决方法,用于返回的 PackageRecord 负载中缺少 noarch 字段。
  • 已修复 conda env update 命令中 --prune 标志无法正常工作的错误。
  • 在某些情况下,环境不再被积极更新到更高优先级的通道。
  • 不再注入来自不存在或不可用的已安装软件包的通道。
  • PackagesNotFoundError 异常中的所有已配置通道都正确打印。
  • 在 CLI 中指定了具有构建字符串的 MatchSpec 且存在具有相同软件包名称的固定规范时,不再出现崩溃。
  • defaults::pkg 解决方法仅适用于默认值 default_channels
  • 用户将无法再使用不兼容的 CLI 规范覆盖固定规范。 相反,他们必须显式修改他们的固定规范。

📄 文档中的新内容 📄

  • 现在记录了与 Conda 的 classic 求解器行为有意偏离的地方。

Conda-Index 中的变化 0.3.0

要更新 Conda-index,请运行

conda install -n base conda-index=0.3.0

✨ 新功能 ✨

  • 已添加 --run-exports 以为每个 subdir 生成符合 CEP-12 的 run_exports.json 文档。
  • 不再默认美化打印 repodata.json,节省时间和空间。
  • 版本要求:conda >= 4.14

Pycosat 中的变化 0.6.5/0.6.6

要更新 Conda-index,请运行

conda install -n base pycosat=0.6.6

✨ 新功能 ✨

  • Pycosat 0.6.4 意外地没有包含要发布的更改。 Pycosat 0.6.5 包含这些更改。
  • PyMem_Calloc() 用于将内存初始化为 0

我们 ❤️ 我们的社区

总的来说,我们在本发布周期中有 11 位 (!) 新贡献者;感谢我们所有开源社区成员的帮助,使这些改进成为可能。

如果您有想法或想帮助改进任何 conda 社区项目,我们很乐意看到新的(和回归的)贡献者!😄