2015-10-21 7 views
6

Wie ich es verstehe, gab es einige Änderungen im Zusammenhang mit SIP, die die Installation schwierig macht.Wie installiere ich Cx_Oracle auf El Capitan

Diese Seiten enthalten Hintergrundinformationen und Hinweise zur Installation. http://sourceforge.net/p/cx-oracle/mailman/message/34534872/

Putting all dies zusammen, hier war mein bester Schuss bei der Installation es zu meinem virtualenv, aber ach, immer noch nicht gut.

Der Fehler Ich erhalte ist:

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: dlopen(/Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /b/227/rdbms/lib/libclntsh.dylib.10.1 
    Referenced from: /Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so 
    Reason: image not found 

hier alle meine installieren Schritte sind:

$ cd /Users/me/sx_direct_env/lib/python2.7 
$ mkdir oracle 
$ cd oracle 
$ export ORACLE_HOME=$PWD 
$ export DYLD_LIBRARY_PATH=$ORACLE_HOME 
$ export LD_LIBRARY_PATH=$ORACLE_HOME 
$ export PATH=$PATH:$ORACLE_HOME 
$ unzip ~/Downloads/instantclient-basic-macos.x64-11.2.0.4.0.zip 
$ unzip ~/Downloads/instantclient-sdk-macos.x64-11.2.0.4.0.zip 
$ mv instantclient_11_2/* . 
$ rmdir instantclient_11_2 
$ curl -O https://raw.githubusercontent.com/kubo/fix_oralib_osx/master/fix_oralib.rb 
$ ruby -a fix_oralib.rb 
adrci: 
    add rpath: @loader_path 
    change install name 
    from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 
     to: @rpath/libclntsh.dylib.11.1 
    change install name 
    from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib 
     to: @rpath/libnnz11.dylib 

genezi: 
    add rpath: @loader_path 
    change install name 
    from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 
     to: @rpath/libclntsh.dylib.11.1 

libclntsh.dylib.11.1: 
    add rpath: @loader_path 
    change identification name 
    from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 
     to: @rpath/libclntsh.dylib.11.1 
    change install name 
    from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib 
     to: @rpath/libnnz11.dylib 

libnnz11.dylib: 
    change identification name 
    from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib 
     to: @rpath/libnnz11.dylib 

libocci.dylib.11.1: 
    change identification name 
    from: /ade/b/3071542110/oracle/rdbms/lib/libocci.dylib.11.1 
     to: @rpath/libocci.dylib.11.1 

libociei.dylib: 
    add rpath: @loader_path 
    change install name 
    from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 
     to: @rpath/libclntsh.dylib.11.1 

libocijdbc11.dylib: 
    add rpath: @loader_path 
    change install name 
    from: /ade/b/2475221476/oracle/rdbms/lib/libclntsh.dylib.11.1 
     to: @rpath/libclntsh.dylib.11.1 
    change install name 
    from: /ade/b/2475221476/oracle/ldap/lib/libnnz11.dylib 
     to: @rpath/libnnz11.dylib 

uidrvci: 
    add rpath: @loader_path 
    change install name 
    from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 
     to: @rpath/libclntsh.dylib.11.1 
    change install name 
    from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib 
     to: @rpath/libnnz11.dylib 

$ pip install cx_oracle 
Collecting cx-oracle 
Installing collected packages: cx-oracle 
Successfully installed cx-oracle-5.2 

$ python -c "import cx_Oracle" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: dlopen(/Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /b/227/rdbms/lib/libclntsh.dylib.10.1 
    Referenced from: /Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so 
    Reason: image not found 
+0

Hallo Greg, aber hast du "cxOracleSIP.sh" ausgeführt? weil Sie mit einem OSX-Sicherheitsproblem und nicht mit einem Oracle-Client-Problem konfrontiert sind. Grüße –

+0

Danke. Ich glaube, dass die fix_oralib.rb auch das Sicherheitsupdate macht. Eine Idee, an der ich arbeite, ist, dass pip nicht die neueste Version installiert. – Greg

+0

Es sollte keine SIP-Probleme geben, wenn Sie die geraden Instant Client 12.1-Bibliotheken verwenden. Setzen Sie die Umgebungsvariable FORCE_RPATH = 1, bevor Sie Cx_Oracle installieren. –

Antwort

0

Ich glaube, ich es fest. Im Grunde genommen war alles in meinen oben genannten Schritten korrekt.

Aber ich endete mit diesem für die pip up installieren, um sicherzustellen, zieht er eine neue Kopie nach unten und neu erstellt (und bekommt vielleicht eine spätere Version ??)

$ pip install --no-cache-dir --allow-external --allow-unverified cx_oracle 

Ich war dann in der Lage cx_Oracle zu importieren, ohne Probleme, aber ich bekam einen Fehler "ORA-21561: OID-Generierung fehlgeschlagen" bei der Verbindung mit dem externen Server.

Dann folgte ich der instructions here und fügte eine Zeile mit meinem Host-Namen der Datei/etc/hosts und alles funktioniert jetzt.

zum Beispiel hinzugefügt, wie diese eine Zeile am Ende der Datei/etc/hosts

127.0.0.1 localhost my-host-name

2

Danke für die Anweisungen Greg.

Ich musste eine symbolische Verbindung für meine cx_Oracle pip Installation erstellen, um zu arbeiten (unter Verwendung der Argumente, die oben zur Verfügung gestellt wurden). Möglicherweise möchten Sie diese zu Ihren Anweisungen hinzufügen.

ln -s libclntsh.dylib.11.1 libclntsh.dylib 

ich auch einen anderen Link für libocci erstellt, wie aus dieser Installationsanleitung vorgeschlagen: https://gist.github.com/thom-nic/6011715

ln -s libocci.dylib.11.1 libocci.dylib 
+0

FWIW, cx_Oracle verwendet nicht C++, so dass Sie die libocci-symbolische Verknüpfung nicht benötigen. Sie benötigen nur den Link libclntsh. –

8

ich die oben versucht und bekam die folgende Fehlermeldung während cx_Oracle mit Oracle instant 12.1 zu installieren versuchen:

[535]: /opt/instantclient_12_1 $ python -c "import cx_Oracle" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): 
     Library not loaded: @rpath/libclntsh.dylib.12.1 
    Referenced from: /Library/Python/2.7/site-packages/cx_Oracle.so 
    Reason: image not found 

Hinweis der @rpath in dem Fehler - es stellt sich heraus, dass beim Erstellen der Cx_Oracle-Bibliothek (für InstantClient 12.1) auf El Capitan der GCC-Compiler erwartet, dass die -rpath-Flag festgelegt wird, wo die oben genannten dynamisch verknüpften Bibliotheken (* .dylib). Auf dem InstantClient 12.1 führt pip dies standardmäßig nicht für Sie aus.

Die python -c "import cx_Oracle" sollte keine Fehler melden.

Für eine vollständige Installationsanleitung (einschließlich Instantclient-Download und -Konfiguration) lesen Sie meinen Beitrag unter http://thelaziestprogrammer.com/sharrington/databases/oracle/install-cx_oracle-mac für Details.

+0

Es sollten keine SIP-Probleme auftreten, wenn Sie die Instant Client 12.1-Bibliotheken verwenden und 'export FORCE_RPATH = 1' vor der Installation ausführen. Wenn Sie cx_Oracle's setup.py überprüfen, können Sie sehen, dass diese Variable dazu führt, dass '-rpath' zur Verbindungslinie hinzugefügt wird. –

+0

Bestätigt, dass es keine SIP-Probleme mit dem instantclient 12.1 gibt, solange Sie den Export FORCE_RPATH = 1 ausführen, bevor Sie pip install cx_Oracle ausführen. Die obige Antwort macht im Wesentlichen, was pip tun würde ... [der verlinkte Beitrag oben] (http://thelaziestprogrammer.com/sharrington/databases/oracle/install-cx_oracle-mac) wurde ebenfalls aktualisiert. –

+0

Ein paar Vereinfachungen/Kommentare zum verlinkten Post: (i) cx_Oracle verwendet OCI, nicht OCCI, daher ist die libocci symbolische Verbindung technisch nicht notwendig. (Ii) ORACLE_HOME wird nur von setup.py während der Installation verwendet es in .bashrc. Im Allgemeinen sollte ORACLE_HOME nicht gesetzt werden, wenn Instant Client verwendet wird, aber cx_Oracle überlädt seine Verwendung und benötigt sie für die Installation. (Iii) Wegen der Verwendung von rpath müssen Sie DYLD_LIBRARY_PATH nicht setzen. Hoffe, diese Hilfe macht es einfacher. –

0

Um cx_Oracle unter OS X zu installieren, laden Sie die 64-Bit-Instant-Client-Basis & SDK-Pakete für OS X von http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html herunter. Mit dieser Version von Instant Client können Sie eine Verbindung zu 10g, 11g und 12c Datenbanken herstellen. Diese Version ist so verlinkt, dass das kürzlich von Apple eingeführte SIP-Problem (das Instant Client 11.2 betrifft) vermieden wird.

Dann führen Sie so etwas wie:

unzip instantclient-basic-macos.x64-12.1.0.2.0.zip 
unzip instantclient-sdk-macos.x64-12.1.0.2.0.zip 
cd instantclient_12_1 
ln -s libclntsh.dylib.12.1 libclntsh.dylib 
cd .. 
export ORACLE_HOME=`pwd`/instantclient_12_1 
export FORCE_RPATH=1 
pip install cx_Oracle 

Sie können oder nicht andere pip Optionen benötigen, erwähnt wie in https://stackoverflow.com/a/33284974/4799035

0

Beachten Sie auch: wenn Ihre Python laufen als 32-Bit und cx_Oracle installiert als 64 Bit, werden Sie auch dieses Problem begegnen. Um dieses Problem zu vermeiden, führen Sie immer Ihren Befehl als Super-User 'su' und klar 'su' Python ist 32 Bit oder 64 Bit. überprüfen Sie Ihre Python-Bit How do I determine if my python shell is executing in 32bit or 64bit mode on OS X?

Kraft 64bit Lauf mit:

Bogen -x86_64/usr/bin/python27

Kraft mit 32-Bit-Lauf:

defaults write com.apple.versioner.python Prefer-32-Bit -bool ja