Heim  >  Artikel  >  Backend-Entwicklung  >  Häufige Probleme und Lösungen für die Installation des cx_Oracle-Moduls in Python

Häufige Probleme und Lösungen für die Installation des cx_Oracle-Moduls in Python

高洛峰
高洛峰Original
2017-02-24 15:00:491573Durchsuche

Die Beispiele in diesem Artikel beschreiben häufige Probleme und Lösungen für die Installation des cx_Oracle-Moduls in Python. Geben Sie es als Referenz an alle weiter. Die Details lauten wie folgt:

Bei der Installation oder Verwendung von cx_Oracle müssen Sie die Oracle-Linkbibliothek wie libclntsh.so.10.1 verwenden, andernfalls ist dies der Fall diverse Fehlermeldungen.

Sie können diese Linkbibliothek erhalten, indem Sie Oracle Instant Client installieren, um die Installation von Hunderten Megabyte Oracle Client zu vermeiden.

Software-Download-Adresse:

cx_Oracles Homepage: http://cx-oracle.sourceforge.net/

Download-Adresse der erforderlichen Oracle-Linkbibliothek: http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

Häufige Fehler und Lösungen:

1.win32-Binärinstallation

in Windows Nach der Installation von cx_Oracle- 5.0-10g.win32-py2.6.msi, beim Import wird ein Fehler beim Laden der DLL wie folgt gemeldet:

IDLE 2.6.1

>>> import cx_Oracle
Traceback (most recent call last):
 File "<pyshell#0>", line 1, in <module>
  import cx_Oracle
ImportError: DLL load failed: 找不到指定的程序。

Lösung:

Laden Sie „instantclient-basic-win32-10.2.0.4.zip“ von der Oracle-Site herunter, entpacken Sie es und extrahieren Sie die oci.dll. Kopieren Sie die Datei Datei in Lib/site-packages im Python-Installationsverzeichnis, z. B. C:/Python26/Lib/site-packages

2. Binärinstallation unter Linux

Unter linux_x86_64 tritt ein Fehler bei der Installation von cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm auf.

[root@BJ-UPDATE-01 ~]# rpm -ivh cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
error: Failed dependencies:
    libclntsh.so.10.1()(64bit) is needed by cx_Oracle-5.0.1-1.x86_64

Lösung:

Referenz http://www.php.cn/

Laden Sie „basic-10.2.0.4.0-linux-x86_64.zip“ von der Oracle-Site in das Verzeichnis /opt herunter und entpacken Sie es. Sie sehen libclntsh.so.10.1 im Verzeichnis /opt/instantclient_10_2

Umgebungsvariablen festlegen

vi /root/.bash_profile

Fügen Sie die folgenden zwei Zeilen hinzu:

export ORACLE_HOME=/opt/instantclient_10_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

Führen Sie source /root/.bash_profile aus, damit die Änderungen wirksam werden

Erstellen Sie einen symbolischen Link zu dieser Linkbibliothek

cd $ORACLE_HOME
ln -s libclntsh.so.x.x libclntsh.so

cx_Oracle neu installieren

Achten Sie darauf, den Parameter --nodeps hinzuzufügen, da sonst der obige Fehler gemeldet wird

[root@BJ-UPDATE-01 ~]# rpm -ivh --nodeps cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
#5.0.3版本不用加--nodeps参数

3. Quellcode-Installation unter Linux

Um die Quelle zu installieren Code unter linux_x86_64, python setup.py build ausführen. Die Fehlermeldung zur Kompilierungszeit lautet wie folgt:

Connection.c:1169: Warnung: Anweisung funktioniert nicht
Connection.c:1171: Fehler: „udt_Connection“ hat kein Mitglied namens „environment“
Connection .c:1172: Warnung: Konvertierung zwischen inkompatiblen Zeigertypen bei Übergabe von Parameter 1 (von „Environment_CheckForError“)
Connection.c:1172: Warnung: Konvertierung zwischen inkompatiblen Zeigertypen beim Übergeben von Parameter 2 (von „Environment_CheckForError“) Konvertierung zwischen Zeigertypen
Connection.c:1172: Fehler: Zu viele Argumente für Funktion „Environment_CheckForError“ angegeben
Connection.c:1176: Fehler: „udt_Connection“ hat kein Mitglied namens „sessionHandle“

Lösung:

Dieser Fehler tritt in Version 5.0.3 nicht auf. Bitte beachten Sie, dass unter ORACLE_HOME ein Include-Verzeichnis vorhanden sein muss. In diesem Verzeichnis müssen für die Kompilierung erforderliche Quelldateien vorhanden sein. Die Datei ist nicht im Oracle Instant Client enthalten. Ich habe es aus dem Verzeichnis D:/oracle/product/10.2.0/client_1/oci/include auf dem Windows-Client kopiert.

4.Importfehler

>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
>>>

Dies liegt an den Einschränkungen von SELinux. Führen Sie den folgenden Befehl aus, um die Einschränkung aufzuheben:

chcon -t texrel_shlib_t cd $ORACLE_HOME/libnnz10.so
chcon -t texrel_shlib_t cd $ORACLE_HOME/libclntsh.so.10.1

5. Laufzeitfehler

Traceback (most recent call last):
 File "oracle_conn.py", line 9, in ?
  connection = cx_Oracle.Connection(u"oracle/oracle123@CCIP")
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

Es ist immer noch eine Einschränkung von SELinux. Setzen Sie SELinux auf deaktiviert

Selinux ausschalten:

Führen Sie den Befehl aus: vim /etc/selinux/config
Ändern Sie „selinux=enforcing“ oder „permissive“ in „disabled“
Führen Sie den Befehl aus: „setenforce 0“

6 Problem mit dem UNICODE-Installationspaket

Traceback (most recent call last):
 File "./oracle_conn.py", line 22, in ?
  folderIds=cursor.fetchmany(10)
cx_Oracle.DatabaseError: OCI-22061: Message 22061 not found; No message file for product=RDBMS, facility=OCI; arguments: [T

Derzeit wurde festgestellt, dass die Version 5.0.3 des Pakets einen Fehler verursacht Beim Ausführen von SQL wird die Verwendung nicht empfohlen. Ersetzen Sie es einfach durch ein Nicht-UNICODE-Paket.

Weitere Artikel zu häufigen Problemen und Lösungen für die Python-Installation des cx_Oracle-Moduls finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn