Сборка Python 2.6 как разделяемой библиотеки прервалась (после того, как она уже работала), есть причина? - PullRequest
0 голосов
/ 28 мая 2011

Я использую CentOS с VPS, на котором установлен Python 2.4, что, к сожалению, означает, что я должен избегать его взлома.Поэтому я устанавливаю Python 2.6 как отдельную установку, а затем использую virtualenv.Вчера я установил Python 2.6 с --enable-shared, чтобы я мог скомпилировать 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 Ответ

3 голосов
/ 29 мая 2011

Благодаря Посту Венского по установке 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...