Назад | Перейти на главную страницу

Python 2.7.5 и 2.7.13 в Linux; конфликт пути к библиотеке с несколькими libpython2.7.so

Есть ли способ указать собственный путь поиска динамической библиотеки для исполняемого файла?

Я хочу, чтобы / usr / bin / python ссылался на /usr/lib64/libpython2.7.so и /usr/local/bin/python2.7 для использования /usr/local/lib/libpython2.7.so.

В настоящее время у меня есть Python 2.7.5 как / usr / bin / python (старый, используется CentOS) и Python 2.7.13 как /usr/local/bin/python2.7 (новый, для разработки). Однако оба исполняемых файла дают мне Python 2.7.13.

$ /usr/bin/python2.7 --version        # Python 2.7.5
Python 2.7.13                         ← НЕПРАВИЛЬНО !!!

$ /usr/local/bin/python2.7 --version  # Python 2.7.13
Python 2.7.13

Это определенно отдельные исполняемые файлы.

-rwxr-xr-x. 1 root root  7136 Nov  5  2016 /usr/bin/python2.7
-rwxr-xr-x. 1 root root 11368 May 13 18:21 /usr/local/bin/python2.7

Это вызывало недоумение, пока я не понял, что они оба динамически связываются с libpython2.7.so, и оба ищут его в / usr / local / lib. Это было подтверждено с помощью ldd. Я могу получить старый Python, изменив /etc/ld.so.conf или $ LD_LIBRARY_PATH.

$ LD_LIBRARY_PATH=/usr/lib64 /usr/bin/python --version        # Python 2.7.5
Python 2.7.5

$ LD_LIBRARY_PATH=/usr/lib64 /usr/local/bin/python --version  # Python 2.7.13
Python 2.7.5                                                  ← НЕПРАВИЛЬНО !!!

Это проблема, потому что yum зависит от системы Python. Если я исправлю это (например, изменив /etc/ld.so.conf), он сломает Python 2.7.13 и все, что зависит от этой новой версии libpython2.7.so (например, Vim со встроенным Python). Мой /etc/ld.so.conf содержит / usr / local / lib.

Добавьте это в свой .bashrc:

alias yum='LD_LIBRARY_PATH=/usr/lib64 yum'

Это гарантирует, что при запуске yum (и только yum) система будет искать общие объекты (динамические библиотеки) сначала в / usr / lib64, а не в / usr / local / lib. Это взлом, но, насколько я могу судить, он неизбежен.

Важный: Это решение применимо только в том случае, если ваша проблема связана с наличием 2.7.x в / usr / bin и 2.7.y в / usr / local / bin (например, 2.7.5 и 2.7.13). Если ваша проблема связана с конфликтом 2.x и 2.y (например, 2.4 и 2.7), это, вероятно, не поможет, а может даже ухудшить ваше положение. Удачи!