Pergunta

Compilei um módulo Python usando minha própria biblioteca Qt4 localizada em ~/opt/qt-4.6.0/, mas quando tento importar esse módulo, as bibliotecas dinâmicas que são carregadas são da minha instalação 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 ...]
>>> 

Existe uma maneira de dizer ao Python (também instalado no MacPorts) para carregar os frameworks localizados no meu ~/opt/qt-4.6.0/lib/ diretório?Não tenho certeza de quais variáveis ​​de ambiente alterar.

Foi útil?

Solução

Tente definir o DYLD_LIBRARY_PATH para colocar suas bibliotecas em ~/opt/qt/... antes das bibliotecas dos MacPorts antes de invocar o python (dê uma olhada em ~/.profile para ver um exemplo de como fazer isso se você não souber;MacPorts faz exatamente a mesma coisa para colocar suas bibliotecas no DYLD_LIBRARY_PATH). dyld, o vinculador dinâmico do OS X usa DYLD_LIBRARY_PATH encontrar bibliotecas em tempo de carregamento (entre outros métodos);Ver man dyld para mais informações.

Outras dicas

Ok, depois que Barry Wark me indicou dyld(1), a página de manual descreveu uma série de variáveis ​​que eu poderia definir.

A primeira dica veio da configuração da variável de ambiente DYLD_PRINT_LIBRARIES, para que eu pudesse ver quais bibliotecas estavam sendo carregadas.

$ 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, então os frameworks para qt4-mac foram realmente carregados primeiro, como suspeitávamos.Relendo a página de manual, a próxima coisa que podemos tentar é mudar o DYLD_FRAMEWORK_PATH para que saiba onde procurar.Agora adicionei esta linha ao final do meu ~/.bash_profile

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

e após fazer login novamente, tentamos importar o módulo vtk python novamente:

$ python -c 'import vtk'
$

Não há saída desta vez.Problema corrigido!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top