构建Python 2.6作为共享库破坏了(之前的工作之后),任何原因?

时间:2011-05-27 21:01:35

标签: python shared-libraries

我正在使用运行CentOS的VPS,安装了Python 2.4 - 遗憾的是这意味着我必须避免破坏它。所以我将Python 2.6安装为单独安装,然后使用virtualenv。昨天,我用--enable-shared安装了Python 2.6,所以我可以编译mod_wsgi - 它运行正常。今天,我不得不从头开始,并将Python 2.6重新安装为共享库 - 由于未知原因,它已经崩溃了。我希望有人可以告诉我为什么它破了。

请注意,我不只是问如何修复它,而是为什么它会破坏。我很确定修复它的答案之一是“设置LD_LIBRARY_PATH变量”。我不想这样做有两个原因。一,我没有做到昨天,一切正常。第二,我必须避免破坏CentOS的Python 2.4部分,如果我通过.bashrc将该变量添加到我的环境中,我不确定是什么,如果有的话,可能会破坏。

安装Python 2.6

deleted/created all relevant directories, not just *make clean*
tar -xzvf Python-2.6.6.tgz
./configure --prefix=/foo/python26 --enable-shared
make
make altinstall

所有似乎都可以工作,make输出中没有明显的错误。只是Python不会运行。

隐藏图书馆

bin/python2.6: error while loading shared libraries: libpython2.6.so.1.0: 
cannot open shared object file: No such file or directory

[/foo/python26/lib]# ls -l
    lrwxrwxrwx  1 root root      19 May 27 15:09 libpython2.6.so -> libpython2.6.so.1.0*
    -r-xr-xr-x  1 root root 5624403 May 27 15:09 libpython2.6.so.1.0*
    drwxr-xr-x 25 root root   20480 May 27 15:09 python2.6/

[/foo/python26/bin]# ls -l
    -rwxr-xr-x 1 root root 10142 May 27 15:09 python2.6*
    -rwxr-xr-x 1 root root  1433 May 27 15:09 python2.6-config*
    missing file! yesterday there was a 'python' linked to python2.6

[/foo/python26/bin]# ldd python2.6
    libpython2.6.so.1.0 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ababe46c000)

我不想设置 LD_LIBRARY_PATH 的第三个原因是,它没有任何感觉 make 进程创建共享库,并将其复制到正确的目录中。 Python 知道它在哪里,该文件在它自己的 lib 目录下。

那么从昨天开始,当它工作时,到今天什么时候它被打破了,会有什么变化?我安装了一些其他软件包,比如django(我删除了)和nginx - 我没有删除nginx,但我看不出它会如何影响任何东西。

1 个答案:

答案 0 :(得分:3)

感谢Vensky's post on installing Python 2.6,我有一个看似修复的东西 - 虽然我仍然不明白为什么事情破坏了,而且这个修复似乎很糟糕。但至少它正在发挥作用。

使用以下行创建文件:

#/etc/ld.so.conf.d/python2.6.conf
/foo/python2.6/lib

然后运行ldconfig命令,不带参数。

检查它是否有效:

[~]# ldconfig -p | grep python
libpython2.6.so.1.0 (libc6,x86-64) => /foo/python26/lib/libpython2.6.so.1.0
libpython2.6.so (libc6,x86-64) => /foo/python26/lib/libpython2.6.so
libpython2.4.so.1.0 (libc6,x86-64) => /usr/lib64/libpython2.4.so.1.0
libpython2.4.so (libc6,x86-64) => /usr/lib64/libpython2.4.so

[/foo/python26/bin]# ldd python2.6
libpython2.6.so.1.0 => /foo/python26/lib/libpython2.6.so.1.0 (0x00002b351dc1a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b351dfca000)

Python 2.6绝对有效,现在似乎已链接到共享库。它看起来不应该干扰系统的Python 2.4。