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-64并且osx-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.

但这不是真的,我的二进制文件没有安装在任何地方并且无法识别......

4

1 回答 1

3
  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再次运行。

于 2020-05-30T06:15:29.290 回答