我正在尝试安装 python 包 cvxopt通过 pip 进入 Centos 6 系统上的虚拟环境。
自 lapack是先决条件,因为我没有系统的 super 用户访问权限,所以我使用以下方法在本地安装了 lapack:
$ cmake -DCMAKE_INSTALL_PREFIX=/home/tom .
$ make install
我注意到在这一步之后 liblapack.a
位于我的本地 lib 目录 /home/tom/lib
中,正如预期的那样。
但是,当我激活虚拟环境并运行 pip install cvxopt
时,出现以下错误:
<snip>
gcc -pthread -shared
build/temp.linux-x86_64-2.7/src/C/base.o
build/temp.linux-x86_64-2.7/src/C/dense.o
build/temp.linux-x86_64-2.7/src/C/sparse.o
-L/usr/lib -L/public/apps/python/2.7.4/lib
-lm -llapack -lblas -lpython2.7 -o build/lib.linux-x86_64-2.7/cvxopt/base.so
/usr/bin/ld: cannot find -llapack
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
我已经尝试将 /home/tom/lib
添加到 LD_LIBRARY_PATH
和 LD_RUN_PATH
但这些似乎都不会影响 gcc
pip
用于构建模块的命令行选项。
谁能告诉我如何为 pip
提供库搜索路径?有没有更好的办法?
最佳答案
经过一些实验,我能够解决问题。我要做的第一件事是为 LAPACK 启用共享库:
~/src/lapack-3.5.0 $ cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/home/tom .
~/src/lapack-3.5.0 $ make install
然后我导出 LD_FLAGS 以包含正确的库搜索路径:
export LD_FLAGS="-L/home/tom/lib"
然后我重新尝试将 cvxopt
从源代码安装到虚拟环境中:
~/src/cvxopt-1.1.6 $ . venv/bin/activate
~/src/cvxopt-1.1.6 (venv)$ python setup.py build install
我没有尝试使用 LD_LIBRARY_PATH
或 LD_RUN_PATH
来确定它们是否仍然需要 LD_FLAGS
。但是,我确实确定共享的 LAPACK 库绝对是必需的; cvxopt
不会链接到静态库。
关于Python pip 库搜索路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949372/