2014-03-03 6 views
8

Ich verwende Debian (das mit Python-2.7.3 kommt) und versuche Python-2.7.6 aus der Quelle zu kompilieren, um es mit mod_wsgi neben Apache zu verwenden.Seltsame Python-Kompilierungsergebnisse mit "--enable-shared" Flag

Offenbar müssen Sie - enable-shared beim Kompilieren für die Verwendung von mod_wsgi verwenden, nach zahlreichen Antworten.

Nach diesen Schritten:

./configure --enable-shared --prefix=/usr/local/bin/python-2.7.6 
make 
make install 

Und dann die Überprüfung der interaktiven Shell @

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

ich mit gegrüßt bin "Python 2.7.3 (Standard, 2. Januar 2013, 14:09:21)" usw.

Warum ergibt sich Python 2.7.3?

Ich versuchte LDD gegen die ausführbare Datei und das ist das Ergebnis:

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) 

Wie verhindere ich es die Systembibliothek verwenden und stattdessen die lokal kompilierte Version verwenden?

Ich weiß, dass es für mich viel einfacher ist, nur auf die Verwendung der System installierten Python-Version zurückzugreifen, und dass der Unterschied in der realen Welt Null ist. Aber dieses Verhalten scheint seltsam.

Antwort

13

Wenn Sie die Marke von Python zu tun, führen Sie es als:

LD_RUN_PATH=/usr/local/lib make 

die Umgebungsvariable LD_RUN_PATH Kräfte 'Python' ausführbare Einstellung erzeugt aussehen in/usr/local/lib vor/usr/lib für Python gemeinsame Bibliothek.

Dies wird in der Dokumentation zu mod_wsgi erwähnt.

Vor diesem wieder zu tun, stellen Sie sicher, dass Sie um ein ‚make distclean‘ und Wiederholung konfigurieren, um sicherzustellen, Sie haben keine alten Build Produkte einsehen.

+1

Was ich mit am Ende war zu tun: kompilieren Python einmal mit --enable-shared, machen sie in das Verzeichnis installieren, stellen Sie distclean es, setzen LD_RUN_PATH auf den neu lib Ordner zusammengestellt, wieder machen mit --enable-shared, Entfernen Sie die zuvor kompilierte Version, make install. Und noch einmal kompilieren Sie mod_wsgi gegen den neuen Python. Vielen Dank für den Zeiger in die richtige Richtung. –

+0

Random Hinweis: Sie können tatsächlich eine RPATH Post-Compilation hinzufügen, mit einem schönen einfachen Programm namens Patchchelf. Das war neulich für mich und hat mich davor bewahrt, etwas neu zu kompilieren, nur weil ich vergessen habe, den RPATH/RUN_PATH zu setzen. Sehr empfehlenswert: https://nixos.org/patchelf.html – CptSupermrkt

+0

Gut zu wissen über Patchelf. Ich habe in den frühen 90er Jahren ein ähnliches Programm wie Solaris verwendet. Wusste nicht, dass so etwas für Linux existierte. –