Python 2.7.5 e 2.7.13 no Linux; conflito de caminho de biblioteca com vários libpython2.7.so

1

Existe uma maneira de especificar um caminho de pesquisa de biblioteca dinâmica personalizada para um executável?

Eu quero que / usr / bin / python faça referência a /usr/lib64/libpython2.7.so e /usr/local/bin/python2.7 para usar /usr/local/lib/libpython2.7.so. / p>

Atualmente, tenho o Python 2.7.5 como / usr / bin / python (antigo, usado pelo CentOS) e o Python 2.7.13 como /usr/local/bin/python2.7 (novo, para desenvolvimento). No entanto, ambos os executáveis me fornecem o 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

Eles são definitivamente executáveis separados.

-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

Isso foi desconcertante até que percebi que ambos linkam dinamicamente a libpython2.7.so, e ambos estão procurando por ele em / usr / local / lib. Isto foi confirmado usando ldd. Eu posso pegar o antigo Python modificando /etc/ld.so.conf ou $ 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!!!

Este é um problema porque o yum depende do sistema Python. Se eu corrigir isso (por exemplo, modificando o /etc/ld.so.conf), ele quebra o Python 2.7.13 e as coisas que dependem deste novo libpython2.7.so (por exemplo, Vim com Python embutido). Meu /etc/ld.so.conf contém / usr / local / lib.

    
por Alex Quinn 17.05.2017 / 22:43

1 resposta

0

Adicione isto ao seu .bashrc:

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

Isso garantirá que, ao executar o yum (e o yum apenas), o sistema procure objetos compartilhados (bibliotecas dinâmicas) primeiro em / usr / lib64 e não em / usr / local / lib. É um truque, mas, pelo que sei, é inevitável.

Importante: Esta solução só é aplicável se o seu problema for devido a ter 2.7.x em / usr / bin e 2.7.y em / usr / local / bin (por exemplo, 2.7.5 e 2.7.13). Se o seu problema se deve ao fato de 2.xe 2.y estarem em conflito (por exemplo, 2.4 e 2.7), isso provavelmente não ajudará e poderá até piorar as coisas para você. Boa sorte!

    
por 15.07.2017 / 22:47