首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用conda-build从相同的源代码构建两个具有不同需求的包

使用conda-build从相同的源代码构建两个具有不同需求的包
EN

Stack Overflow用户
提问于 2021-01-14 10:02:01
回答 1查看 193关注 0票数 2

我正在做一个使用Tensorflow的项目。要求是使用conda-build将我的代码打包为conda包。

Tesnorflow在conda上还没有一个同时支持cpu和gpu的软件包参见这个question。相反,conda上的Tensorflow是两个包,一个用于CPU tensorflow和GPU tensorflow-gpu

这将迫使我为我的项目构建两个用于CPU和GPU的包。使用conda-build而不需要两个repos的最好方法是什么?

是否可以使用conda-build构建多个meta.yaml文件

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-01-14 23:34:10

假设您的配方在CPU和GPU情况下几乎相同,此用例的预期解决方案是使用build variants创建配方。

对于您的用例,您可能不需要通读所有文档。下面是一个简单(但完整)的示例。

首先,在您的配方目录中创建conda_build_config.yaml,并定义一个变量并列出它可以具有的每个可能值。这将指示conda-build构建您的配方两次--为您列出的每个值构建一次。

此外,该变量还可以在selectorsjinja templates中的meta.yaml中使用。

在这个愚蠢的例子中,我们假设我们的包应该依赖于zlibxz中的一个,而不是两者都依赖。我们将使用名为foo的变量在两者之间进行选择。

代码语言:javascript
复制
recipe/
├── build.sh
├── conda_build_config.yaml
└── meta.yaml
代码语言:javascript
复制
# recipe/conda_build_config.yaml
foo:
 - bar
 - baz
代码语言:javascript
复制
# recipe/meta.yaml
package:
  name: mypackage-{{ foo }}
  version: 0.1

requirements:
  run:
    - zlib  # [foo=='bar']
    - xz    # [foo=='baz']

现在尝试构建食谱:

代码语言:javascript
复制
conda build recipe

请注意,它构建了这两个“变体”。在输出的末尾,它打印:

代码语言:javascript
复制
# If you want to upload package(s) to anaconda.org later, type:

anaconda upload /opt/miniconda/conda-bld/osx-64/package-bar-0.1-h11ff1f9_0.tar.bz2
anaconda upload /opt/miniconda/conda-bld/osx-64/package-baz-0.1-he38177a_0.tar.bz2

因此,在您的示例中,使用一个变量在包的cpugpu版本之间切换。在recipe requirements中,使用如上所示的选择器选择您需要的特定版本的tensorflow

还要注意,您在conda_build_config.yaml中定义的变量在build.sh中可以作为环境变量使用,以防您在每种情况下都需要运行不同的构建命令。

代码语言:javascript
复制
# recipe/build.sh
echo "Now building variant: ${foo}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65712365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档