使用库构建程序并在 conda 环境中安装 headers

Build program using library and headers installed in a conda environment

我在 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
...

和headers位于:

/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

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

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

正如您所说,

It seems conda sets the $LIBRARY_PATH variable automatically. See anaconda2/envs/<ENV>/etc/conda/activate.d/pygpu_vars.sh. I recently noticed that I was able to compile my program using OpenCV from my conda. I thought I was using the system's library, but it wasn't working until I activated the environment.

很可能是某个包创建了该脚本(可能是 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