Hec*_*Hec 13 python python-2.7
当我用python 2.7.12 altinstall时
./configure --prefix =/opt/python --enable-shared
它出现为python 2.7.5(系统默认python)
但没有
--enable共享
它出现在2.7.12,我错过了什么?
这是RHEL 7.2
这不是一个路径问题:
没有--enable-shared
[root @myrig~]#/ opt/python/bin/python2.7 -V
Python 2.7.12
使用--enable-shared
[root @myrig~]#/ opt/python/bin/python2.7 -V
Python 2.7.5
像这样编译python修复了我的问题:
./configure --enable-shared --prefix=/opt/python LDFLAGS=-Wl,-rpath=/opt/python/lib
Run Code Online (Sandbox Code Playgroud)
礼貌Ned Deily:
问题是,在大多数Unix系统上(除了Mac OS X之外),共享库的路径不是绝对路径.因此,如果您在非标准位置安装Python,这是正确的做法,以免干扰相同版本的系统Python,您将需要在共享库的路径中配置或通过运行时的环境变量,如LD_LIBRARY_PATH.你可能最好避免 - 启用共享; 用这个很容易遇到这样的问题.
参考:https://bugs.python.org/issue27685
使用ldd comand,您可以查看可执行文件在何处搜索库:
ldd python2.7
linux-vdso.so.1 => (0x00007fffa75ec000)
libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f717042e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7170211000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f716fe46000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f716fc2c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f716fa28000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f716f824000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f716f51b000)
/lib64/ld-linux-x86-64.so.2 (0x000055969d00b000)enter code here
Run Code Online (Sandbox Code Playgroud)
您可以在环境中(非持久)更改python2.7的lib搜索路径,并设置LD_LIBRARY_PATH变量:
export LD_LIBRARY_PATH=/opt/python/lib
Run Code Online (Sandbox Code Playgroud)
或设置系统范围内的持久性方式:
echo "/opt/python/lib" > /etc/ld.so.conf.d/python.conf
ldconfig -v
Run Code Online (Sandbox Code Playgroud)
或设置持久的可执行方式:
patchelf --set-rpath /opt/python/lib/ python2.7
Run Code Online (Sandbox Code Playgroud)