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!