从本地C++程序构建Conda包

3

我正在尝试构建(并稍后上传)一个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
我正在尝试将一个本地的C++库转换成conda包,类似于你所做的。你能否分享一下你的过程/代码仓库以供参考? - User 10482
1个回答

3
  1. 如何在编译后将二进制文件复制到正确位置以便环境激活时能够识别出来?

正如您在编辑中提到的,应该在${PREFIX}目录中安装。

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

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

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

我希望这个软件包后续可以在linux-64和osx-64上使用...... 在构建过程中(在Makefile中),我仅使用g ++。 注意:在Mac上,它会使用clang++而不是g++。确保您的Makefile尊重${CXX}环境变量,而不是硬编码g++。
然而,当我稍后尝试使用conda安装本地的包时,使用"conda install --use-local",我遇到了下面的错误: 奇怪。 "conda install --use-local CoolName"应该能够实现您的要求。但是有几个方法供您尝试:
  • Double-check the contents of the environment you're trying to install it into:

      conda list
    
  • Try installing to a fresh environment:

      conda create -n my-new-env --use-local CoolName
    
  • Delete any obsolete versions of the package you might have created before you successfully built the package:

# 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


谢谢!我移除了所有内容,重新构建了一个只包含我的程序的新“env”,现在它可以正常工作了! - maciek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接