我正在做一个使用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文件
谢谢
发布于 2021-01-14 23:34:10
假设您的配方在CPU和GPU情况下几乎相同,此用例的预期解决方案是使用build variants创建配方。
对于您的用例,您可能不需要通读所有文档。下面是一个简单(但完整)的示例。
首先,在您的配方目录中创建conda_build_config.yaml,并定义一个变量并列出它可以具有的每个可能值。这将指示conda-build构建您的配方两次--为您列出的每个值构建一次。
此外,该变量还可以在selectors和jinja templates中的meta.yaml中使用。
在这个愚蠢的例子中,我们假设我们的包应该依赖于zlib或xz中的一个,而不是两者都依赖。我们将使用名为foo的变量在两者之间进行选择。
recipe/
├── build.sh
├── conda_build_config.yaml
└── meta.yaml# recipe/conda_build_config.yaml
foo:
- bar
- baz# recipe/meta.yaml
package:
name: mypackage-{{ foo }}
version: 0.1
requirements:
run:
- zlib # [foo=='bar']
- xz # [foo=='baz']现在尝试构建食谱:
conda build recipe请注意,它构建了这两个“变体”。在输出的末尾,它打印:
# 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因此,在您的示例中,使用一个变量在包的cpu和gpu版本之间切换。在recipe requirements中,使用如上所示的选择器选择您需要的特定版本的tensorflow。
还要注意,您在conda_build_config.yaml中定义的变量在build.sh中可以作为环境变量使用,以防您在每种情况下都需要运行不同的构建命令。
# recipe/build.sh
echo "Now building variant: ${foo}"https://stackoverflow.com/questions/65712365
复制相似问题