Python pip库搜索路径

4 投票
1 回答
3781 浏览
提问于 2025-04-18 01:56

我正在尝试在Centos 6系统的虚拟环境中通过pip安装一个叫做cvxopt的python包。

因为lapack是这个包的依赖,而我没有超级用户权限,所以我使用以下方法在本地安装了lapack:

$ cmake -DCMAKE_INSTALL_PREFIX=/home/tom .
$ make install

我注意到在这一步之后,liblapack.a文件如预期一样被放在了我的本地库目录/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中,但这似乎都没有影响到pip在构建模块时使用的gcc命令行选项。

有没有人能告诉我如何给pip提供库搜索路径?有没有更好的方法?

1 个回答

1

经过一些实验,我终于解决了这个问题。首先,我需要为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无法链接到静态库。

撰写回答