2014-03-03 28 views
8

我正在使用Debian(隨Python-2.7.3一起提供),嘗試從源代碼編譯Python-2.7.6以與Apache一起使用mod_wsgi。奇怪的Python編譯結果帶有「--enable-shared」標誌

根據許多答案,顯然你必須在編譯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

我與打招呼「Python 2.7.3(default,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的系統版本並且現實世界的差異爲零就容易多了。但是這種行爲似乎很奇怪。

回答

13

當你這樣做的Python的品牌,運行它:

LD_RUN_PATH=/usr/local/lib make 

設置環境變量LD_RUN_PATH勢力 '蟒蛇' 可執行文件生成在看的/ usr/local/lib目錄前/ usr/lib目錄爲Python共享庫。

這是在mod_wsgi文檔中提到的。

再次這樣做之前,請確保你做一個「make distclean命令」然後重新配置,以確保你沒怎麼老生成產品。

+1

我最終需要做的是:使用--enable-shared編譯python,使安裝進入目錄,使distclean它,設置LD_RUN_PATH到新編譯的lib文件夾,再次使用--enable-shared,刪除以前編譯的版本,進行安裝。並且再一次針對新的python重新編譯mod_wsgi。非常感謝指向正確方向的指針。 –

+0

隨機附註:您實際上可以使用名爲patchelf的精美簡單程序添加RPATH後編譯。這是我最近的新聞,因爲我忘了設置RPATH/RUN_PATH而讓我重新編譯了一些東西。強烈推薦:https://nixos.org/patchelf.html – CptSupermrkt

+0

有關patchelf的相關信息。早在90年代初,我曾經在Solaris上使用類似的程序。不知道Linux存在這樣的事情。 –