使用在conda环境中安装的库和标头构建程序

时间:2017-06-28 03:26:24

标签: conda

我在conda环境中安装了OpenCV 3.2.0。我想用它来构建一个应用程序,但是我不确定conda是否已经提供了一个工具来自动处理考虑到活动环境可见的依赖项。

例如,OpenCV库位于以下路径中:

/home/me/anaconda2/envs/python3/lib/libopencv_imgproc.so.3.2
/home/me/anaconda2/envs/python3/lib/libopencv_optflow.so.3.2
/home/me/anaconda2/envs/python3/lib/libopencv_freetype.so.3.2
...

和标题位于:

/home/me/anaconda2/envs/python3/include/opencv2/core.hpp
/home/me/anaconda2/envs/python3/include/opencv2/ximgproc.hpp
...

我可以通过直接使用

传递标志来解决这个问题
-I/home/me/anaconda2/envs/python3/include/ -L/home/me/anaconda2/envs/python3/lib

LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

但是,这是最好的方法吗?我看到referencesconda build,但看到文档,它似乎更适合构建conda包。

1 个答案:

答案 0 :(得分:1)

确实,conda build用于构建conda包。您可以在激活环境时自动设置环境变量,请参见此处:https://conda.io/docs/using/envs.html#saved-environment-variables

如你所说,

  

似乎conda自动设置$LIBRARY_PATH变量。见anaconda2/envs/<ENV>/etc/conda/activate.d/pygpu_vars.sh。我最近注意到我能够从我的conda使用OpenCV编译我的程序。我以为我在使用系统的库,但在我activate环境之前它没有工作。

包可能创建了该脚本(可能是pygpu包?),这样当您激活环境时,正确的变量被设置为使用随包提供的库。虽然不能保证所有包都能做到这一点......

基于envs/python3/etc/conda/activate.d/pygpu_vars.sh的示例:

export CPATH_PYGPU_BACKUP="$CPATH"
export CPATH=anaconda2/envs/python3/include:"$CPATH"
export LIBRARY_PATH_PYGPU_BACKUP="$LIBRARY_PATH"
export LIBRARY_PATH=anaconda2/envs/python3/lib:"$LIBRARY_PATH"
export LD_LIBRARY_PATH_PYGPU_BACKUP="$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH=anaconda2/envs/python3/lib:"$LD_LIBRARY_PATH"

停用envs/python3/etc/conda/deactivate.d/pygpu_vars.sh处的脚本:

export CPATH="$CPATH_PYGPU_BACKUP"
unset CPATH_PYGPU_BACKUP
export LIBRARY_PATH="$LIBRARY_PATH_PYGPU_BACKUP"
unset LIBRARY_PATH_PYGPU_BACKUP
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH_PYGPU_BACKUP"
unset LD_LIBRARY_PATH_PYGPU_BACKUP