Python altinstall期间,./configure --enable-shared到底是做什么的?

20
当我使用“./configure --prefix=/opt/python --enable-shared”进行 altinstall 安装 python 2.7.12 时,会出现 python 2.7.5 的问题(系统默认 python)。但是如果不使用“--enable-shared”,则出现的是2.7.12版本。请问我漏掉了什么?这是在 RHEL 7.2 上进行的操作。根据测试结果,这不是路径问题。使用“--enable-shared”时,版本为2.7.5;而不使用该选项则版本号为2.7.12。
3个回答

19

像这样编译Python解决了我的问题:

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

由Ned Deily提供的资讯:

问题在于,大多数Unix系统(除了Mac OS X)中,共享库的路径不是绝对路径。因此,如果您在非标准位置安装Python,这样做是正确的,以避免与相同版本的系统Python产生冲突,您需要在运行时配置共享库路径或通过环境变量(如LD_LIBRARY_PATH)提供它。最好避免使用--enable-shared;使用它很容易遇到像这样的问题。

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


1
你的意思是说,你得到不同的Python版本的原因是两个构建之间工作目录的差异,而不是--enable-shared的存在吗? - user5538922
@bombs:不,使用不同的Python版本的原因是可执行文件/opt/python/bin/python2.7链接到了系统Python库(版本2.7.5),而不是刚刚构建的那个(版本2.7.12)。在构建中添加-rpath会为该可执行文件添加一个库搜索目录,从而使其找到正确的共享库。 - Collin
对我来说很有效,因此我无法正确安装wsgi模块,谢谢。 - hemanjosko

5

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


5

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

你可以在环境中设置LD_LIBRARY_PATH变量以更改python2.7的库搜索路径(非持久性)。
export LD_LIBRARY_PATH=/opt/python/lib

或者设置一个持久化的系统-wide方式:
echo "/opt/python/lib" > /etc/ld.so.conf.d/python.conf
ldconfig -v

或者设置一个持久的可执行方式:
patchelf --set-rpath /opt/python/lib/ python2.7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接