从本地C ++程序构建conda软件包

时间:2020-05-28 15:00:17

标签: anaconda conda miniconda conda-build

我正在尝试构建(然后上传)一个conda程序包,其中包含我用C ++开发的自定义程序。
为简化问题,我有以下meta.yaml

package:
  name: CoolName
  version: "1.0.0"

source:
  path: ./source

requirements:
  build:
    - make

和以下build.sh

make

我在这里有两个问题:
1)我应如何以及在何处复制由make编译产生的二进制文件,以便在激活环境时确实可以识别该二进制文件?
2)我应该如何指定g ++作为依赖项?我希望以后可以将此软件包用于linux-64osx-64 ...在构建过程中(在Makefile中)我仅使用g ++。


编辑

我已将构建脚本修改为:

make
mkdir -p $PREFIX/bin
cp my_binary $PREFIX/bin/my_binary

现在conda-build成功了。但是,当我稍后尝试使用conda install --use-local在本地安装软件包时,会得到:

Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.

但这不是事实,我的二进制文件未安装在任何地方,无法识别...

1 个答案:

答案 0 :(得分:1)

  1. 我应该如何以及在何处复制由make编译产生的二进制文件,以便在激活环境后确实可以识别它?

如您在编辑中所述,请安装在${PREFIX}内的某个位置

  1. 如何将g ++指定为依赖项?

要使用由conda提供的编译器(而不是系统编译器),请使用以下命令:

requirements:
  build:
    - {{ compiler('cxx') }}

我希望以后可以将此软件包用于linux-64和osx-64 ...在构建过程中(在Makefile中),我仅使用g ++。

注意:在Mac上,它将使用clang++,而不是g++。确保Makefile遵守${CXX}环境变量,而不是硬编码g++

但是,当我稍后尝试使用conda install --use-local在本地安装软件包时,会得到:

这很奇怪。 conda install --use-local CoolName应该做您想要的。但是,您可以尝试以下一些方法:

  • 仔细检查您要将其安装到的环境的内容:

      conda list
    
  • 尝试安装到新的环境:

      conda create -n my-new-env --use-local CoolName
    
  • 删除您在成功构建软件包之前可能已创建的所有过时版本的软件包:

# Inspect the packages you've created,
# and consider deleting all but the most recent one.
ls $(conda info --base)/conda-bld/linux-64/CoolName*.tar.bz2

...然后尝试再次运行conda install