在python altinstall期间,./configure--enable shared做什么?

在python altinstall期间,./configure--enable shared做什么?,python,python-2.7,Python,Python 2.7,当我使用altinstall python 2.7.12时 ./configure--prefix=/opt/python--enable shared 它被命名为Python2.7.5(系统默认python) 但没有 --启用共享 结果是2.7.12,我错过了什么 这是RHEL 7.2 这不是路径问题: 不使用--启用共享 [root@myrig~]#/opt/python/bin/python2.7-V Python 2.7.12 使用--启用共享 [root@myrig~]#/opt/p

当我使用altinstall python 2.7.12时

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

它被命名为Python2.7.5(系统默认python)

但没有

--启用共享

结果是2.7.12,我错过了什么

这是RHEL 7.2


这不是路径问题:

不使用--启用共享

[root@myrig~]#/opt/python/bin/python2.7-V

Python 2.7.12

使用--启用共享

[root@myrig~]#/opt/python/bin/python2.7-V

Python 2.7.5


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

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

./configure --enable-shared --prefix=/opt/python LDFLAGS=-Wl,-rpath=/opt/python/lib
奈德·戴利提供:

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


Ref:

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

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设置LD_LIBRARY_path变量的库搜索路径(非持久):

或设置持久的系统范围方法:

echo "/opt/python/lib" > /etc/ld.so.conf.d/python.conf
ldconfig -v
或设置持久可执行方式:

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

您的意思是,您获得不同python版本的原因是工作目录的差异,而不是两个版本之间存在
--enable shared
。@bombs:不,拥有不同python版本的原因是可执行文件
/opt/python/bin/python2.7
链接到系统python库(版本2.7.5),而不是刚刚构建的版本(版本2.7.12)。将
-rpath
添加到构建中会为该可执行文件添加一个库搜索目录,从而使其能够找到正确的共享库。这对我来说很有效,因为我无法正确安装wsgi模块,也感谢。。
patchelf --set-rpath /opt/python/lib/ python2.7