我正在使用运行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将该变量添加到我的环境中,我不确定是什么,如果有的话,可能会破坏。
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,但我看不出它会如何影响任何东西。
答案 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。