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

时间:2016-08-04 16:37:34

标签: python python-2.7

当我用

添加python 2.7.12时
  

./ configure --prefix = / opt / python --enable-shared

它出现为python 2.7.5(系统默认python)

但没有

  

- 启用共享

它出现在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

3 个答案:

答案 0 :(得分:5)

像这样编译python修复了我的问题:

./configure --enable-shared --prefix=/opt/python LDFLAGS=-Wl,-rpath=/opt/python/lib

礼貌的Ned Deily:

问题是,在大多数Unix系统上(除了Mac OS X之外),共享库的路径不是绝对路径。因此,如果您在非标准位置安装Python,这是正确的做法,以免干扰相同版本的系统Python,您将需要在共享库的路径中配置或通过运行时的环境变量,如LD_LIBRARY_PATH。你可能最好避免 - 启用共享;用这个很容易遇到这样的问题。

参考:https://bugs.python.org/issue27685

答案 1 :(得分:4)

我不确定为什么版本号不同,但Graham Dumpleton在this网站上说“当运行configure时,你应该提供--enable-shared选项以确保构建共享库对于Python。如果不这样做,就会阻止任何想要使用Python作为嵌入式环境的应用程序工作。“

答案 2 :(得分:4)

使用ldd命令,您可以查看可执行文件搜索库的位置:

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

您可以在环境中更改python2.7的lib搜索路径设置LD_LIBRARY_PATH变量(非持久性):

export LD_LIBRARY_PATH=/opt/python/lib

或设置持续的系统范围:

echo "/opt/python/lib" > /etc/ld.so.conf.d/python.conf
ldconfig -v

或设置持久的可执行方式:

patchelf --set-rpath /opt/python/lib/ python2.7