我正在尝试构建(然后上传)一个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.
但这不是事实,我的二进制文件未安装在任何地方,无法识别...
答案 0 :(得分:1)
- 我应该如何以及在何处复制由make编译产生的二进制文件,以便在激活环境后确实可以识别它?
如您在编辑中所述,请安装在${PREFIX}
内的某个位置
- 如何将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
。