Frage

Ich versuche, cx_Oracle für eine Python 2.7.2- und Oracle 11g-Installation zu erstellen, aber das eingebaute cx_Oracle.so libclntsh.so.11.1 kann nicht gefunden werden, daher schlägt der Import von cx_Oracle in Python fehl.

/mypath/cx_Oracle-5.1.1/build/lib.linux-x86_64-2.7-11g]$ ldd cx_Oracle.so
    libclntsh.so.11.1 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae9be290000)
    libc.so.6 => /lib64/libc.so.6 (0x00002ae9be4ab000)
    /lib64/ld-linux-x86-64.so.2 (0x000000389b600000)

Ich habe libclntsh.so.11.1 in meinem Oracle-Client-Installationsverzeichnis:

/apps/oracle/client/11.2.0.1/home1/lib]$ ls -l libclntsh.so*
libclntsh.so -> /apps/oracle/client/11.2.0.1/home1/lib/libclntsh.so.11.1
libclntsh.so.11.1

Und das cx_Orakel setup.py hebt dieses Bibliotheksverzeichnis auf:

/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build
/apps/oracle/client/11.2.0.1/home1/
running build
running build_ext
building 'cx_Oracle' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/apps/oracle/client/11.2.0.1/home1/rdbms/demo -I/apps/oracle/client/11.2.0.1/home1/rdbms/public -I/apps/bweb/python-2.7.2/include/python2.7 -c cx_Oracle.c -o build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -DBUILD_VERSION=5.1.1
In file included from /apps/oracle/client/11.2.0.1/home1/rdbms/public/oci.h:3024,
                 from cx_Oracle.c:10:
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10788: warning: function declaration isn't a prototype
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10794: warning: function declaration isn't a prototype
gcc -pthread -shared build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -L/apps/oracle/client/11.2.0.1/home1/lib -lclntsh -o build/lib.linux-x86_64-2.7-11g/cx_Oracle.so

Stimmt offensichtlich etwas mit diesem Setup nicht?

Danke

UPDATE

Mein LD_BIBLIOTHEK_PFAD enthält das obige lib-Verzeichnis mit libclntsh.so.11.1

$ echo $LD_LIBRARY_PATH
/apps/oracle/client/11.2.0.1/lib

Das scheint keinen Unterschied zu machen.Ich baue das wieder auf cx_Oracle.so datei und es zeigt immer noch libclntsh.so.11.1 => not found wenn ich renne $ ldd cx_Oracle.so.

Python kann das erstellte Modul nicht laden:

Python 2.7.2 (default, Jan 19 2012, 14:38:32)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory

GEL

Das Problem bezog sich auf die LD_BIBLIOTHEK_PFAD Umgebungsvariable.Aufgrund von Einschränkungen beim Setup, mit dem ich arbeite (corp env), musste ich cx_Oracle als einen anderen Benutzer (Systemkonto) erstellen.also.Ich habe das ausgeführt:

$ sudo -u username python27 setup.py build

Also auch wenn LD_BIBLIOTHEK_PFAD wurde für mich richtig eingestellt, meine Version wurde nicht verwendet, wenn der Befehl als anderer Benutzer ausgeführt wurde.Ich konnte erfolgreich erstellen, indem ich den Quellcode an einen Speicherort verschoben habe, an dem ich Berechtigungen hatte, und den Build als mein Benutzer ausgeführt habe.

War es hilfreich?

Lösung

Hinzufügen /apps/oracle/client/11.2.0.1/home1/lib/ zu Ihrem LD_LIBRARY_PATH Umgebungsvariable führen Sie den folgenden Befehl im Terminal aus, bevor Sie Python ausführen, oder fügen Sie ihn Ihrem hinzu .bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/oracle/client/11.2.0.1/home1/lib/

Andere Tipps

Ja.Sie haben vergessen, Ihrem Loader-Cache-Tool mitzuteilen, dass es in diesem Verzeichnis nach Bibliotheken suchen muss.Fügen Sie dieses Verzeichnis hinzu zu /etc/ld.so.conf oder eine ähnliche Datei und lauf ldconfig.

Viele Oracle-Produkte installieren oraenv.Es wird unter anderem Umgebungsvariablen festlegen, LD_LIBRARY_PATH, also erwägen Sie, zu laufen . oraenv anstatt Ihre Umgebung manuell einzustellen.

Stellen Sie die LD_RUN_PFAD.(LD_RUN_PATH wird vom Linker verwendet, um anzugeben, wo nur zur Laufzeit nach Bibliotheken gesucht werden soll.)

Erstellen Sie nun cx_Oracle.

/mypath/cx_Oracle-5.1.1]$ export LD_RUN_PATH="/apps/oracle/client/11.2.0.1/home1/lib"
/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build

Dies erfordert nicht die Einstellung von LD_LIBRARY_PATH beim Importieren von cx_Oracle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top