Ответ:
Проблема в том, что конкретный символ в структуре DirectoryService был окончательно удален в Lion (он устарел в 10.2). libdb2.dylib, установленный DB2 Express-C, пытается вызвать эту функцию и вызывает ошибку при импорте любого из модулей Python.
Чтобы обойти это, вам нужно настроить вашу среду для связи с более старой версией инфраструктуры DirectoryService. Для этого вам понадобится установленный Snow Leopard (он может работать со старыми версиями, но я не проверял его, и вам понадобится самая новая версия, которую вы можете достать, это, конечно, не Lion). Вы найдете инфраструктуру DirectoryService, установленную здесь:
/System/Library/Frameworks/DirectoryService.framework/
Скопируйте этот каталог из установки Snow Leopard в любое место установки Lion. Для этого примера я скопировал каталог DirectoryService.framework в каталог OldFrameworks в ~ :
~/OldFrameworks/DirectoryService.framework/
Установите переменную среды $DYLD_LIBRARY_PATH
, чтобы она содержала путь к фактической библиотеке:
export DYLD_LIBRARY_PATH=${HOME}/OldFrameworks/DirectoryService.framework/Versions/Current/:${DYLD_LIBRARY_PATH}
Любая среда, в которой вы выполняете указанную выше команду, будет настроена так, чтобы позволить python импортировать ibm_db или PyDB2. Добавьте его в свой .profile, .bashrc и т. д., чтобы настроить среду на постоянной основе. Однако помните, что это означает, что все команды, выполняемые в настроенной среде, будут пытаться связать версию DirectoryService со снежным барсом. Это потенциально может вызвать ошибки с другими инструментами (мне еще не приходилось сталкиваться с ними). Было бы разумно устанавливать DYLD_LIBRARY_PATH только в оболочках, где это необходимо.
person
drootang
schedule
16.08.2011