2009-09-04 2 views
2

Я скомпилировал модуль Python, используя мою собственную библиотеку Qt4, расположенную в ~/opt/qt-4.6.0/, , но когда я пытаюсь импортировать этот модуль, динамические библиотеки, которые загружаются, находятся в моей установке MacPorts Qt4.Неправильная среда для Mac OS X загружена

$ /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 ...] 
>>> 

Есть ли способ сказать Python (также установлен с MacPorts) для загрузки базы, расположенные в моем ~/opt/qt-4.6.0/lib/ каталоге? Я не уверен, какие переменные среды меняются.

ответ

2

Попробуйте установить DYLD_LIBRARY_PATH поставить свои библиотеки в ~/opt/qt/... до библиотек MacPorts' перед вызовом питона (обратите внимание на ~/.profile для примера того, как это сделать, если вы не знаете, MacPorts делает точно такую ​​же вещь поместите его библиотеки на DYLD_LIBRARY_PATH). dyld, динамический компоновщик OS X использует DYLD_LIBRARY_PATH для поиска библиотек во время загрузки (среди прочих методов); См. man dyld для получения дополнительной информации.

+0

Я раньше пробовал LD_LIBRARY_PATH, но это не сработало. Большое спасибо за указатель на 'dyld'. Его справочная страница очень информативна. Посмотрим, смогу ли я использовать это для решения этой проблемы. – Luis

+0

Вы также попробовали DYLD_LIBRARY_PATH? –

+0

... только видел ваш ответ. Рад, что ты это понял. –

2

Хорошо, после того, как Барри Уорк указал мне на dyld(1), на странице руководства было описано несколько переменных, которые я мог установить.

Первый намек на установку переменной окружения DYLD_PRINT_LIBRARIES, поэтому я мог видеть, какие библиотеки загружались.

$ 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 ...] 
$ 

Ах, поэтому фреймворки для qt4-mac действительно загружались первыми, как и мы подозревали. Перечитывая страницу man, следующая вещь, которую мы можем попробовать, это изменить DYLD_FRAMEWORK_PATH, чтобы он знал, где искать. Теперь я добавил эту линию к концу моего ~/.bash_profile

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

и после входа обратно, мы пытаемся снова импортировать модуль питона ВОК:

$ python -c 'import vtk' 
$ 

Там нет никакого вывода на этот раз. Проблема исправлена!

 Смежные вопросы

  • Нет связанных вопросов^_^