我正在CentOS 5上安装Python2.7。我构建并安装了Python,如下所示
./configure --enable-shared --prefix=/usr/local
make
make install
当我尝试运行/usr/local/bin/python时,会收到以下错误消息
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
当我在/usr/local/bin/python上运行ldd时,我得到
ldd /usr/local/bin/python
libpython2.7.so.1.0 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e9a00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000030e9200000)
libutil.so.1 => /lib64/libutil.so.1 (0x00000030fa200000)
libm.so.6 => /lib64/libm.so.6 (0x00000030e9600000)
libc.so.6 => /lib64/libc.so.6 (0x00000030e8e00000)
/lib64/ld-linux-x86-64.so.2 (0x00000030e8a00000)
如何告诉Python在哪里可以找到libpython?
请尝试以下操作:
如果
/usr/local/lib
不在/usr/local/lib
中,请将其替换为安装libpython2.7.so.1.0
的文件夹。如果此操作有效并且您希望将更改永久化,则有两个选项:
将
export LD_LIBRARY_PATH=/usr/local/lib
添加到主目录中的.profile
中(只有在启动新的shell实例时使用加载此文件的shell时,此操作才有效)。此设置将仅影响您的用户。将
/usr/local/lib
添加到/etc/ld.so.conf
并运行ldconfig
。当然,这是一个全系统的设置。我也有同样的问题,我是这样解决的:
如果您知道libpython所在的位置,我认为它应该是
/usr/local/lib/libpython2.7.so.1.0
在您的示例中,您只需创建指向它的符号链接:然后再次尝试运行
ldd
,看看是否有效。戴上我的掘墓人帽。。。
我发现解决这个问题的最好方法是在编译时。既然您是唯一的设置前缀,那么最好显式地告诉可执行文件在哪里找到它的共享库。与OpenSSL和其他软件包不同,Python没有为您提供很好的配置指令来处理备用库路径(并不是每个人都是您所知道的根目录…),在最简单的情况下,您所需要的是:
或者如果您喜欢非linux版本:
“
rpath
”标志告诉python它在特定路径中有它需要的运行库。您可以进一步利用这个想法来处理安装到不同于标准系统位置的依赖项。例如,在我的系统上,由于我没有根访问权限,需要安装几乎完全独立的Python,所以我的配置行如下所示:在本例中,我将python使用的库(如
ffi
、readline
等)编译到python目录树本身的extlib
目录中。这样我就可以对python-${python_VERSION}目录进行tar并将其放在任何地方,然后它就会“工作”(前提是您不会遇到libc
或libm
冲突)。这也有助于在同一个框中运行多个版本的Python,因为您不需要不断更改LD_LIBRARY_PATH
,也不必担心获取错误版本的Python库。编辑:忘了说,如果您不将
PYTHONPATH
环境变量设置为用作前缀的内容,并且未能编译某些模块,则编译会有问题,例如,要扩展上面的示例,请将PYTHONPATH
设置为上面示例中使用的前缀,export PYTHONPATH=/apps/python-${PYTHON_VERSION}
。。。相关问题 更多 >
编程相关推荐