web-dev-qa-db-ja.com

Python Linuxでは2.7.5および2.7.13;ライブラリパスが複数の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 as/usr/bin/python(old、CentOSで使用)およびPython 2.7.13 as/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を使用して確認されました。 /etc/ld.so.confまたは$ LD_LIBRARY_PATHを変更することで、古いPythonを取得できます。

$ 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)が壊れます。私の/etc/ld.so.confには/ usr/local/libが含まれています。

1
Alex Quinn

これを.bashrcに追加します:

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

これにより、yum(およびyumのみ)を実行するときに、システムは/ usr/local/libではなく/ usr/lib64で最初に共有オブジェクト(動的ライブラリ)を検索します。それはハックですが、私が知る限り、それは避けられません。

重要:この解決策は、問題の原因が/ usr/binに2.7.x、/ usr/local/binに2.7.yがある場合にのみ適用できます(例:2.7.5および2.7.13)。 )。問題の原因が2.xと2.yの競合(2.4と2.7など)である場合、これはおそらく役に立たず、事態を悪化させる可能性さえあります。幸運を!

0
Alex Quinn