Linux 上的 Python 2.7.5 和 2.7.13;库路径与多个 libpython2.7.so 冲突

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。

答案1

将其添加到你的 .bashrc :

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

这将确保在运行 yum(并且只运行 yum)时,系统将首先在 /usr/lib64 中搜索共享对象(动态库),而不是在 /usr/local/lib 中搜索。这是一种 hack,但据我所知,这是不可避免的。

重要的:此解决方案仅适用于您的问题是由于 /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)造成的,那么这可能无济于事,甚至可能让事情变得更糟。祝您好运!

相关内容