从本地 C++ 程序生成 conda 包

Build conda package from a local C++ program

提问人:maciek 提问时间:5/28/2020 最后编辑:maciek 更新时间:6/28/2020 访问量:2209

问:

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

package:
  name: CoolName
  version: "1.0.0"

source:
  path: ./source

requirements:
  build:
    - make

以及以下内容:build.sh

make

我在这里有两个问题:
1)我应该如何以及在哪里复制作为编译结果的二进制文件,以便在环境激活时确实可以识别它?
2) 我应该如何指定 g++ 作为依赖项?我希望这个包以后可用,并且......在构建过程中(在 Makefile 中),我只使用 g++。
makelinux-64osx-64


编辑

我已经修改了我的构建脚本,使其具有:

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

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

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

# All requested packages already installed.

但事实并非如此,我的二进制文件没有安装在任何地方,也无法识别......

蟒蛇 迷你康 康达-build

评论

1赞 User 10482 6/14/2021
我正在尝试将本地 C++ 库转换为 conda 包,类似于您所做的。是否可以共享您的流程/代码存储库以供参考?

答:

3赞 Stuart Berg 5/30/2020 #1
  1. 我应该如何以及在哪里复制作为 make 编译结果的二进制文件,以便在环境激活时确实可以识别它?

正如您在编辑中提到的,安装在${PREFIX}

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

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

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

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

注意:在 Mac 上,它将使用 ,而不是 。确保您的 Makefile 尊重环境变量而不是硬编码。clang++g++${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

评论

0赞 maciek 5/30/2020
谢谢!我删除了所有内容,用我的程序构建一个新的,它就可以工作了!env