Python pip 库搜索路径

标签 python pip virtualenv lapack cvxopt

我正在尝试安装 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_PATHLD_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_PATHLD_RUN_PATH 来确定它们是否仍然需要 LD_FLAGS。但是,我确实确定共享的 LAPACK 库绝对是必需的; cvxopt 不会链接到静态库。

关于Python pip 库搜索路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949372/

相关文章:

python - "pip install --user ..."的目的是什么?

python - 两个数组之间的逐元素内运算符

python - 模块未找到错误 : No module named 'visdom' when importing visdom

python - 如何在数据库(MYSQL)中保留VARCHAR,但在sqlalchemy模型中保留ENUM

django - "git push": slug compilation hangs

python - Pycharm - 模块属于特定项目而不是所有项目

ubuntu - 如何在 virtualenv 中重新运行 'postactivate' 脚本?

python - 在 virtualenv 目录中安装模块

python - 从一对一迁移到一对多时如何执行数据迁移

python - pip 失败,出现 AttributeError : 'module' object has no attribute 'wraps'