Domanda

ho compilato un modulo Python usando la mia libreria Qt4 situato a ~/opt/qt-4.6.0/, ma quando provo ad importare tale modulo, le librerie dinamiche che vengono caricati vengono dalla mia installazione MacPorts Qt4.

$ /opt/local/bin/python2.6
>>> import vtk
objc[58041]: Class QMacSoundDelegate is implemented in both /Users/luis/opt/qt-4.6.0/lib/QtGui.framework/Versions/4/QtGui and /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui. Using implementation from /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui.
objc[58045]: Class QCocoaColorPanelDelegate is implemented in both /Users/luis/opt/qt-4.6.0/lib/QtGui.framework/Versions/4/QtGui and /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui. Using implementation from /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui.
[... more output like above ...]
>>> 

C'è un modo di raccontare Python (installato anche da MacPorts) per caricare i quadri situati nella mia directory ~/opt/qt-4.6.0/lib/? Non sono sicuro di quali variabili ambiente per cambiare.

È stato utile?

Soluzione

Provare a impostare la DYLD_LIBRARY_PATH di mettere le librerie in ~/opt/qt/... prima biblioteche dei macports' prima di richiamare python (dare un'occhiata a ~/.profile per un esempio di come fare questo, se non si conosce; MacPorts fa la stessa identica cosa per mettere le sue librerie sul DYLD_LIBRARY_PATH). dyld, il linker dinamico OS X utilizza DYLD_LIBRARY_PATH per trovare le librerie in fase di carico (tra gli altri metodi); Vedere man dyld per maggiori informazioni.

Altri suggerimenti

Ok, dopo Barry Wark mi ha segnalato dyld(1), la pagina man ha descritto un certo numero di variabili che ho potuto impostare.

Il primo accenno è venuto da impostare l'ambiente DYLD_PRINT_LIBRARIES variabile, così ho potuto vedere quello che le biblioteche venivano caricati.

$ DYLD_PRINT_LIBRARIES=1 python -c 'import vtk'
[... snip ...]
dyld: loaded: /opt/local/libexec/qt4-mac/lib/QtGui.framework/Versions/4/QtGui
dyld: loaded: /opt/local/lib/libpng12.0.dylib
dyld: loaded: /opt/local/libexec/qt4-mac/lib/QtSql.framework/Versions/4/QtSql
dyld: loaded: /opt/local/libexec/qt4-mac/lib/QtCore.framework/Versions/4/QtCore
[... snip ...]
dyld: loaded: /Users/luis/opt/qt-4.6.0/lib/QtGui.framework/Versions/4/QtGui
dyld: loaded: /Users/luis/opt/qt-4.6.0/lib/QtSql.framework/Versions/4/QtSql
dyld: loaded: /Users/luis/opt/qt-4.6.0/lib/QtCore.framework/Versions/4/QtCore
[... snip ...]
$

Ah, quindi le strutture per la qt4-mac sono stati effettivamente corso di caricamento prima, proprio come abbiamo sospettato. Rileggendo la pagina man, la prossima cosa che possiamo provare sta cambiando il DYLD_FRAMEWORK_PATH modo che sappia dove guardare. Ora aggiunto questa riga alla fine del mio ~/.bash_profile

export DYLD_FRAMEWORK_PATH="${HOME}/opt/qt-4.6.0/lib:${DYLD_FRAMEWORK_PATH}"

e dopo il log in, ci prova a importare di nuovo il modulo python vtk:

$ python -c 'import vtk'
$

Non c'è uscita questa volta. Risolto il problema!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top