跳到主要内容

FAQ

我正在寻找的软件包不在 conda-forge 上,我该怎么办?

我们在“贡献软件包”部分提供了关于贡献软件包的概述和逐步说明。

来自 conda-forge 的软件包的 feedstock 已更新,需要多长时间才能在 Anaconda Cloud 上更新?

这取决于队列,但一个好的经验法则是等待至少 30 分钟到 2 小时。如果在 24 小时后仍未看到更新,请提出 issue。

来自 conda-forge 的软件包已过时或损坏,我在哪里可以报告问题?

你可以在 GitHub 上软件包的 feedstock 仓库中打开一个 issue。搜索仓库 conda-forge/<软件包名称>-feedstock。在那里你也可以提出修复建议,甚至成为维护者。请参阅“维护软件包”部分了解详细信息。

我有一个问题/建议。如何联系你们?

请加入我们的 Zulip 聊天室。我们总是乐于解答问题并帮助初学者。

conda-forge github 团队是将共同维护者添加到一组相关软件包的非常有效的方式。例如,大多数 R 软件包由 conda-forge/R 团队共同维护。要创建一个新团队,你可以使用你的软件包中现有的 feedstock 之一。每个 feedstock 都会自动分配一个团队(由该 feedstock 的维护者组成)。例如,conda-forge R 团队来自 r-feedstock。然后你只需在维护者部分添加 - conda-forge/r,使 r-feedstock 的所有维护者也成为新软件包的维护者。

安装和更新需要很长时间,我该怎么办?

启用严格通道优先级可能会有帮助。你可以通过以下方式启用:

conda config --set channel_priority strict

你也可以尝试使用名为 mamba 的软件包。mamba 是一个与 conda 兼容的软件包,可以用来代替 conda。它采用 C 语言实现的更快求解器。可以通过以下方式安装:

conda install mamba

为什么 Travis-CI 在我的 feedstock 上失败?

Travis CI 构建应该通过 conda-forge.yml 配置文件启用或禁用。然而,有时 Travis CI 出于某种原因(可能某处存在 bug)会忽略这一点。在这种情况下,请忽略失败的构建。请注意,travis-ci.org 构建即将被淘汰,并被 travis-ci.com 取代。

如何在我的环境中安装 C/C++ 编译器?

你可以使用我们方便的元软件包 c-compilercxx-compiler 来安装适合你平台的编译器栈。例如,错误消息

x86_64-apple-darwin13.4.0-clang: No such file or directory

是表明你缺少编译器的明显迹象。

为什么 C/C++ 编译器不能自动知道如何查找 conda 安装的库?

我们所有的工具链都构建为交叉编译器(即使它们构建为在与目标架构相同的架构上运行)。我们这样做是因为这使得它们可以像任何其他 conda 软件包一样安装在任何地方。因此,编译器的内置搜索路径仅包含它们构建时使用的 sysroot。编译器二进制文件的名称也带有“前缀”,其中包含有关它们所针对的架构和 ABI 的更完整信息。因此,实际的二进制文件名称将类似于 x86_64-conda-linux-gnu-cc,而不是 gcc

conda-forge 基础设施提供了激活脚本,当您 conda activate 包含编译器工具链的环境时,这些脚本会运行。这些脚本设置了许多环境变量,这些变量通常被 GNU autotoolsmake 在标准(即内置)构建规则中使用。例如,您会看到变量 CC 设置为长编译器名称 x86_64-conda-linux-gnu-cc。激活脚本还设置了一个 CMAKE_ARGS 变量,其中包含 conda-forge 社区认为对配置 cmake 构建流程有用的许多参数。特别值得注意的是,激活脚本将 CONDA_PREFIX/includeCONDA_PREFIX/lib 路径添加到相应的 FLAGS 环境变量(CLAGSCPPFLAGSLDFLAGS 等),以便许多构建系统能够正确地拾取它们。

如果你有项目构建所需的自定义 FLAGS,或者你无法使用 conda-forge 提供的某些标志进行构建,你会怎么做? 如果你正在构建一些设置为交叉编译的东西,并且期望 CC 包含目标工具链的名称,但又希望能够通过简单地调用 gcc 来构建一些东西供构建主机在构建期间使用,那该怎么办?

上面提到的编译器元软件包还安装了一些软件包,这些软件包为目标系统运行的工具链创建了短名称(如 gcc)到实际工具链二进制名称(如 x86_64-conda-linux-gnu-cc)的符号链接。

还可以安装一个新的可选软件包 conda-gcc-specs,它添加了
_ -include $CONDA_PREFIX/include 到编译命令 _ -rpath $CONDA_PREFIX/lib -rpath-link $CONDA_PREFIX/lib -disable-new-dtags -L $CONDA_PREFIX/lib 到链接命令

通过将编译器元软件包与 conda-gcc-specs 一起使用,你可以包含和链接安装在 CONDA_PREFIX 中的库,而无需提供任何 conda 特定的命令行参数。

如何使 conda gcc 使用我的系统库?

首先,conda-forge 基础设施非常努力地避免使用任何系统提供的库,否则软件包之间的依赖关系很快就会变得不完整,并且任何东西都无法工作。

但是,作为最终用户,当不构建将通过 conda-forge 打包和分发的东西时,你可能需要链接到系统上的库,而不是 conda 环境中的库。这可以通过(对于 gcc)在命令行上传递 -sysroot=/ 来完成。

如何在我的环境中编译 CUDA(主机或设备)代码?

从 CUDA 12.0 开始,conda-forge 提供了完整的 CUDA 软件包套件,包括各种元软件包以将组件组合在一起。这些元软件包及其文档会经常更新,因此为了获得最新的建议和文档,请阅读 cuda feedstock 中提供的相关指南

如何处理由于 ABI 不兼容导致的软件包损坏?

如果你的软件包因版本升级而破坏了 ABI,以下是你可采取的一些修复步骤

  • 使用更正后的 run_exports 重建新版本。
  • 使用更正后的 run_exports 重建旧版本。
  • 热修复依赖项的 repodata 以包含软件包的更正后的 pinning。
  • conda-forge-pinning 中添加一个 PR 来 pin 旧版本(如果尚不存在)
  • 按照 CFEP-09 打开一个 migrator

要了解更多关于如何指定 run_exports 的信息,请参阅“指定 run_exports”。你可以看到一些示例作为参考,其中损坏的软件包通过以下方式修复: