在python altinstall期间./configure --enable-shared究竟做了什么?

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

Hec*_*Hec 9

像这样编译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


小智 5

我不确定版本号为何不同,但是Graham Dumpleton在网站上说:“运行configure时,您应该提供--enable-shared选项,以确保共享库是为Python构建的。不这样做您将阻止任何希望使用Python作为嵌入式环境的应用程序正常工作。”


Fab*_*lin 5

使用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)