Python 2.7 奇怪的Python编译结果,带有--启用“共享”;旗帜

Python 2.7 奇怪的Python编译结果,带有--启用“共享”;旗帜,python-2.7,gcc,compilation,debian,mod-wsgi,Python 2.7,Gcc,Compilation,Debian,Mod Wsgi,我正在使用Debian(Python-2.7.3附带),试图从源代码编译Python-2.7.6,以便与Apache一起使用mod_wsgi 根据众多答案,显然在编译mod_wsgi时必须使用--enable shared 遵循以下步骤: ./configure --enable-shared --prefix=/usr/local/bin/python-2.7.6 make make install 然后检查交互式shell@ /usr/local/bin/python-2.7.6/bin/

我正在使用Debian(Python-2.7.3附带),试图从源代码编译Python-2.7.6,以便与Apache一起使用mod_wsgi

根据众多答案,显然在编译mod_wsgi时必须使用--enable shared

遵循以下步骤:

./configure --enable-shared --prefix=/usr/local/bin/python-2.7.6
make
make install
然后检查交互式shell@

/usr/local/bin/python-2.7.6/bin/python

我收到了“Python2.7.3(默认,2013年1月2日,14:09:21)”之类的问候

为什么会产生Python 2.7.3

我对可执行文件尝试了ldd,结果如下:

linux-vdso.so.1 =>  (0x00007fff271ff000)
libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007f1545638000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f154541c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1545217000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f1545014000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1544d92000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1544a06000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f15447ef000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f15445d9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1545b40000)
如何阻止它使用系统库,而是使用本地编译的版本


我知道,对我来说,恢复使用系统安装的Python版本要容易得多,而现实世界的差异是零。但这种行为似乎很奇怪。

当您制作Python时,请按以下方式运行:

LD_RUN_PATH=/usr/local/lib make
设置环境变量LD_RUN_PATH将强制生成的“python”可执行文件在/usr/local/lib之前查找python共享库

mod_wsgi文档中提到了这一点


在再次执行此操作之前,请确保执行“make distclean”并重新运行configure以确保没有旧的构建产品。

我最后要做的是:使用--enable shared编译python一次,将install设置为dir,使distclean,将LD_RUN_路径设置为新编译的lib文件夹,再次使用--enable shared,删除以前编译的版本,进行安装。再次针对新的python重新编译mod_wsgi。非常感谢指向正确方向的指针。随机注释:实际上,您可以使用一个名为patchelf的非常简单的程序添加RPATH post编译。这对我来说是最近的新闻,它避免了我仅仅因为忘记设置RPATH/RUN\u路径而重新编译某些东西。强烈推荐:很高兴了解patchelf。早在90年代初,我就在Solaris上使用过这样的程序。我不知道Linux上存在这样的东西。