Conda 频道#

Conda-build 支持标准 conda 频道 行为。

相同频道和包名称问题#

如果频道和包名称相同,如果使用短频道名称可能会遇到构建问题。

假设您的 Anaconda.org 用户名或组织名称是 example。假设您创建了一个名为 example 的包,其文件布局类似于

setup.py
conda/meta.yaml
example/

如果您的构建依赖于频道中的其他一些包,您需要添加 -c example,但是,以下代码

conda-build ./conda/ -c example

将出现以下错误消息(路径将不同)

requests.exceptions.HTTPError: 404 Client Error: None for url:
file:///path/to/your/local/example/noarch/repodata.json
[...]
The remote server could not find the noarch directory for the requested channel with
url: file:///path/to/your/local/example/noarch/repodata.json
[...]
As of conda 4.3, a valid channel must contain a `noarch/repodata.json` and
associated `noarch/repodata.json.bz2` file, even if `noarch/repodata.json`
is empty. please request that the channel administrator create
`noarch/repodata.json` and associated `noarch/repodata.json.bz2` files.

这是因为 conda-build 会将项目中的目录 ./example/ 视为一个频道。这是 conda CI 服务器的设计使然,在构建之前,构建路径可能很长、很复杂,并且不可预测。

有几种方法可以解决此问题。

  1. 使用所需频道的 URL

    conda-build ./conda/ -c https://conda.anaconda.org/example/
    
  2. 从 conda 食谱目录中运行构建

    cd conda
    conda-build . -c example
    
  3. 使用标签规范解决方法

conda-build ./conda/ -c example/label/main

从技术上讲,它与 -c example 相同,因为 main 是默认标签,但现在它不会错误地找到本地文件系统上的频道 example/label/main