Linux 上的 Python 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 作為 /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 確認了這一點。我可以通過修改 /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 的東西(例如,帶有嵌入式 Python 的 Vim)。我的 /etc/ld.so.conf 包含 /usr/local/lib。
將此添加到您的 .bashrc :
alias yum='LD_LIBRARY_PATH=/usr/lib64 yum'
這將確保在執行 yum(和僅 yum)時,系統將首先在 /usr/lib64 中搜尋共享對象(動態庫),而不是 /usr/local/lib。這是一個黑客,但據我所知,這是不可避免的。
**重要提示:**此解決方案僅適用於您的問題是由於 /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)造成的,那麼這可能無濟於事,甚至可能使您的情況變得更糟。祝你好運!