FAQ
我正在寻找的软件包不在 conda-forge 上,我该怎么办?
我们在“贡献软件包”部分提供了关于贡献软件包的概述和逐步说明。
来自 conda-forge 的软件包的 feedstock 已更新,需要多长时间才能在 Anaconda Cloud 上更新?
这取决于队列,但一个好的经验法则是等待至少 30 分钟到 2 小时。如果在 24 小时后仍未看到更新,请提出 issue。
来自 conda-forge 的软件包已过时或损坏,我在哪里可以报告问题?
你可以在 GitHub 上软件包的 feedstock 仓库中打开一个 issue。搜索仓库 conda-forge/<软件包名称>-feedstock
。在那里你也可以提出修复建议,甚至成为维护者。请参阅“维护软件包”部分了解详细信息。
我有一个问题/建议。如何联系你们?
请加入我们的 Zulip 聊天室。我们总是乐于解答问题并帮助初学者。
我有一组相关的软件包,如何创建一个 conda-forge 团队?
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-compiler
和 cxx-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 autotools
和 make
在标准(即内置)构建规则中使用。例如,您会看到变量 CC
设置为长编译器名称 x86_64-conda-linux-gnu-cc
。激活脚本还设置了一个 CMAKE_ARGS
变量,其中包含 conda-forge 社区认为对配置 cmake 构建流程有用的许多参数。特别值得注意的是,激活脚本将 CONDA_PREFIX/include
和 CONDA_PREFIX/lib
路径添加到相应的 FLAGS
环境变量(CLAGS
、CPPFLAGS
、LDFLAGS
等),以便许多构建系统能够正确地拾取它们。
如果你有项目构建所需的自定义 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”。你可以看到一些示例作为参考,其中损坏的软件包通过以下方式修复: