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                         ← WRONG!!!

$ /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 / локальный / 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                                                  ← WRONG!!!

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

1
задан 17 May 2017 в 23:43
1 ответ

Добавьте это в свой .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), это, вероятно, не поможет, а может даже ухудшить ваше положение. Удачи!

0
ответ дан 4 December 2019 в 04:56

Теги

Похожие вопросы