提问人:maciek 提问时间:5/28/2020 最后编辑:maciek 更新时间:6/28/2020 访问量:2209
从本地 C++ 程序生成 conda 包
Build conda package from a local C++ program
问:
我正在尝试构建(稍后上传)一个 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++。make
linux-64
osx-64
编辑
我已经修改了我的构建脚本,使其具有:
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.
但事实并非如此,我的二进制文件没有安装在任何地方,也无法识别......
答:
- 我应该如何以及在哪里复制作为 make 编译结果的二进制文件,以便在环境激活时确实可以识别它?
正如您在编辑中提到的,安装在${PREFIX}
- 我应该如何指定 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
评论
env
评论