Wie bekomme ich ibm_db oder PyDB2 python Module, um mit DB2 unter Mac OS X 10.7 Lion zu arbeiten?

Ich habe diese Frage / Antwort verwendet, um DB2 in Lion zu installieren: Wie installiere ich IBM DB2 Express-C unter Mac OS X 10.7 Lion?

Nach der Konfiguration meiner Datenbanken bin ich in der Lage, db2 von der Befehlszeile aus zu verwenden, um Abfragen auszuführen, aber die Python-Module ibm_db und PyDB2 können beide nicht mit dem folgenden Fehler importieren:

  • DB2-Verbindung über pyodbc und pandas.io.sql in Unix-Box mit Nicht-Root
  • Wie man python mit db2 verbindet?
  • Pyodbc.Error 'IM002' Verbindung zu DB2
  • >>> import ibm_db Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: dlopen(/Library/Python/2.7/site-packages/ibm_db-1.0.4-py2.7-macosx-10.7-intel.egg/ibm_db.so, 2): Symbol not found: _dsIsDirServiceRunning Referenced from: /Users/<username>/sqllib/lib64/libdb2.dylib Expected in: /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService 

    Wie kann ich das beheben und ibm_db und PyDB2 mit DB2 in Lion richtig arbeiten?

    Bearbeiten: Beantwortete Antworten auf Antworten

  • Django-Modell-Vererbung: Erstellen Sie eine Instanz der vorhandenen Instanz (Downcast)?
  • Wie kann ich den Klassenruf innerhalb einer importierten Klasse in Python überschreiben?
  • Polymorphismus in Django
  • Hinzufügen von Funktionen aus anderen Dateien zu einer Python-Klasse
  • Python-Klasse Attribut Vererbung
  • Einfache Vererbung mit Django-Vorlagen
  • 2 Solutions collect form web for “Wie bekomme ich ibm_db oder PyDB2 python Module, um mit DB2 unter Mac OS X 10.7 Lion zu arbeiten?”

    Sie können die db2-Bibliotheken mit install_name_tool ändern, um die kopierte Version von DirectoryService.framework zu betrachten, also müssen Sie DYLD_LIBRARY_PATH nicht ändern

    Volle Gutschrift geht an die folgenden, ich bin einfach Aktualisierung dieses Threads durch den Prozess der Installation von db2 / ibm_db auf Lion und finden Sie diesen Thread als einer der Top-Hits über Google.

    http://www.ibm.com/developerworks/forums/thread.jspa?threadID=238136&start=30&tstart=0

    Mit anderen hier beschriebenen Optionen:

    http://www.ibm.com/developerworks/forums/message.jspa?messageID=14604855#14604855

    Die Antwort (falls der obige Thread verschwindet):

    Kopiere das Snow Leopard DirectoryService.framework zu

     /opt/SL_Frameworks/DirectoryService.framework 

    Dann

     cd /opt/IBM/db2/V9.5/ install_name_tool -change /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService /opt/SL_Frameworks/DirectoryService.framework/Versions/A/DirectoryService lib64/libdb2sec.dylib install_name_tool -change /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService /opt/SL_Frameworks/DirectoryService.framework/Versions/A/DirectoryService lib64/libdb2.dylib 

    Die referenzierte Post erwähnt eine dritte Bibliothek

     libdb2e.dylib 

    Allerdings habe ich nur den db2 Client installiert, um das ibm_db python module zu benutzen und diese bibliothek ist nicht vorhanden

    Antworten:

    Das Problem ist, dass ein bestimmtes Symbol im DirectoryService-Framework endlich in Lion entfernt wurde (es wurde in 10.2 veraltet). Libdb2.dylib, die von DB2 Express-C installiert wird, versucht, diese Funktion aufzurufen und verursacht den Fehler beim Importieren eines Python-Moduls.

    Um dies zu umgehen, müssen Sie Ihre Umgebung so konfigurieren, dass sie sich gegen eine ältere Version des DirectoryService-Frameworks verknüpft. Um dies zu tun, brauchst du eine Installation von Snow Leopard (es kann mit älteren Versionen funktionieren, aber ich habe es nicht getestet, und du wirst das neueste bekommen, das du deine Hände bekommen kannst, das ist natürlich kein Lion. Hier finden Sie das DirectoryService Framework:

     /System/Library/Frameworks/DirectoryService.framework/ 

    Kopiere das Verzeichnis von einer Snow Leopard-Installation an einen beliebigen Ort, den du in deiner Lion-Installation wünschst. Für dieses Beispiel habe ich das Verzeichnis DirectoryService.framework in ein Verzeichnis namens OldFrameworks in ~:

     ~/OldFrameworks/DirectoryService.framework/ 

    $DYLD_LIBRARY_PATH Sie die Umgebungsvariable $DYLD_LIBRARY_PATH , um den Pfad zur eigentlichen Bibliothek zu enthalten:

     export DYLD_LIBRARY_PATH=${HOME}/OldFrameworks/DirectoryService.framework/Versions/Current/:${DYLD_LIBRARY_PATH} 

    Jede Umgebung, in der Sie den obigen Befehl ausführen, wird so konfiguriert, dass Python erlaubt, um ibm_db oder PyDB2 zu importieren. Fügen Sie es Ihrem .profile, .bashrc, etc. hinzu, um Ihre Umgebung dauerhaft zu konfigurieren. Denken Sie daran, dass dies bedeutet, dass alle Befehle, die in der konfigurierten Umgebung ausgeführt werden, versuchen, sich gegen die Schneeleopardversion von DirectoryService zu verknüpfen. Dies könnte möglicherweise Fehler mit anderen Werkzeugen verursachen (ich habe noch irgendwelche zu begegnen). Es wäre klug, nur DYLD_LIBRARY_PATH in Schalen zu setzen, wo du es brauchst.

    Python ist die beste Programmiersprache der Welt.