2013-04-15 11 views
5

Sto cercando di costruire Python direttamente dal codice sorgente, senza diritti di amministratore, e dopo l'esecuzione:Preparazione _tkinter e sqlite3 per l'installazione di Python (senza diritti di amministratore)

CPPFLAGS esportazione = '- I/opt/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include
-I/opt/tcl8.6.0/include/'

export LDFLAGS =' - L/opt/sqlite-3.7.16.2/lib -L/opt/tk8.6.0/lib/
-L/opt/tcl8.6.0/lib/./configure --prefix =/path_to_python-2.7.4 --enable-shared '

e poi

make 

ottengo il seguente:

edificio '_tkinter' estensione

gcc -pthread -fPIC -fno-strict-aliasing -g -O2 - DNDEBUG -g -fwrapv -O3 -Wall -Wintict-prototypes -DWITH_APPINIT = 1 -I/usr/X11/include -I. -Include-I./Include -I/opt/sqlite/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include -I/opt/tcl8.6.0/include -I/usr/local/include - I/opt/python/src/Python-2.7.4/Include -I/opt/python/src/Python-2.7.4 -c /opt/python/src/Python-2.7.4/Modules/_tkinter.c - o build/temp.linux-x86_64-2.7/opt/python/src/Python-2.7.4/Modules/_tkinter.o

gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG - g -fwrapv -O3 -Wall -Wintict-prototypes -DWITH_APPINIT = 1 -I/usr/X11/include -I. -Include-I./Include -I/opt/sqlite/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include -I/opt/tcl8.6.0/include -I/usr/local/include - I/opt/python/src/Python-2.7.4/Include -I/opt/python/src/Python-2.7.4 -c /opt/python/src/Python-2.7.4/Modules/tkappinit.c - o build/temp.linux-x86_64-2.7/opt/python/src/Python-2.7.4/Modules/tkappinit.o

gcc -pthread -shared -L/opt/sqlite/sqlite-3.7.16.2/lib -L/opt/tk8.6.0/lib/-L/opt/tcl8.6.0/lib/-L/opt/sqlite/sqlite-3.7.16.2/lib -L/opt/tk8.6.0/lib/- L/opt/tcl8.6.0/lib/-I. -Include-I./Include -I/opt/sqlite/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include -I/opt/tcl8.6.0/include build/temp.linux-x86_64-2.7 /opt/python/src/Python-2.7.4/Modules/_tkinter.o build/temp.linux-x86_64-2.7/opt/python/src/Python-2.7.4/Modules/tkappinit.o -L/usr/X11/lib -L/opt/sqlite/sqlite-3.7.16.2/lib -L/opt/tk8.6.0/lib/-L/opt/tcl8.6.0/lib/-L/usr/local/lib - L. -ltk8.6 -ltcl8.6 -lX11 -lpython2.7 -o costruire/lib.linux-x86_64-2.7/_tkinter.so

* ATTENZIONE: rinomina "_tkinter", in quanto l'importazione non è riuscito: libtk8.6 .so: impossibile aprire il file oggetto condiviso: nessun file o directory

La cosa strana è che posso vedere libtk8.6.so. In realtà è proprio lì sotto /opt/tcl8.6.0/lib come ho specificato con LDFLAGS.

Perché la compilazione non è riuscita?

risposta

4

Questo problema si verifica durante l'installazione in setup.py, quando Python tenta di importare _tkinter.Se si guarda alla funzione di build_extension, c'è un blocco che dice:

imp.load_dynamic(ext.name, ext_filename) 

Questa linea prova di carico dinamico di _tkinter (che utilizza la libreria condivisa dinamica libtk8.6.so). Quindi, anche se la compilazione/collegamento funzionava, quando Python testa il modulo, utilizza la libreria dinamica e non avevo tcl/lib né tk/lib in LD_LIBRARY_PATH. Una volta aggiunti questi, tutto ha funzionato bene.

In sintesi: ho dovuto aggiungere il seguente includono sentieri attraverso CPPFLAGS

  • /path_to/sqlite3/include
  • /path_to/tcl/include
  • /path_to/tk/include

i seguenti percorsi lib attraverso LDFLAGS

  • /path_to/sqlite3/lib
  • /path_to/tcl/lib
  • /path_to/tk/lib

e seguenti percorsi lib attraverso LD_LIBRARY_PATH:

  • /path_to/sqlite3/lib
  • /path_to/tcl/lib
  • /path_to/tk/lib

con tutto questo, tutto ha funzionato.

+0

dove modificare CPPFLAGS? –

Problemi correlati