Maison > Article > développement back-end > Problèmes courants et solutions pour l'installation du module cx_Oracle en python
Les exemples de cet article décrivent les problèmes courants et les solutions pour l'installation du module cx_Oracle en python. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Lors de l'installation ou de l'utilisation de cx_Oracle, vous devez utiliser la bibliothèque de liens Oracle, telle que libclntsh.so.10.1, sinon il y aura divers messages d'erreur.
Vous pouvez obtenir cette bibliothèque de liens en installant Oracle Instant Client pour éviter d'installer des centaines de mégaoctets d'Oracle Client.
Adresse de téléchargement du logiciel :
Page d'accueil de cx_Oracle : http://cx-oracle.sourceforge.net/
Adresse de téléchargement de la bibliothèque de liens Oracle requise : http://www.oracle.com/technology/software/tech/oci/instantclient/index.html
Erreurs courantes et solutions :
Installation binaire 1.win32
dans Windows Après l'installation de cx_Oracle- 5.0-10g.win32-py2.6.msi, lors de l'importation, une erreur d'échec de chargement de la DLL est signalée, comme suit :
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: 找不到指定的程序。
Solution :
Téléchargez instantclient-basic-win32-10.2.0.4.zip depuis le site Oracle, décompressez-le et extrayez le oci.dll Copiez le fichier dans Lib/site-packages dans le répertoire d'installation de Python, tel que C:/Python26/Lib/site-packages
2 Installation binaire sous Linux
Sous linux_x86_64, une erreur se produit lors de l'installation de cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm.
[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
Solution :
Référence http://www.php.cn/
Téléchargez basic-10.2.0.4.0-linux-x86_64.zip depuis le site Oracle dans le répertoire /opt et décompressez-le. Vous verrez libclntsh.so.10.1 dans le répertoire /opt/instantclient_10_2
. Définir les variables d'environnement
vi /root/.bash_profile
Ajoutez les deux lignes suivantes :
export ORACLE_HOME=/opt/instantclient_10_2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
Exécutez le source /root/.bash_profile pour que les modifications prennent effet
Créez un lien symbolique vers cette bibliothèque de liens
cd $ORACLE_HOME ln -s libclntsh.so.x.x libclntsh.so
Réinstallez cx_Oracle
Attention à ajouter le paramètre --nodeps, sinon l'erreur ci-dessus sera signalée
[root@BJ-UPDATE-01 ~]# rpm -ivh --nodeps cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm #5.0.3版本不用加--nodeps参数
3. Installation du code source sous Linux
Définissez les variables d'environnement et les liens symboliques comme ci-dessus. code sous linux_x86_64, exécutez python setup.py build, le message d'erreur de compilation est le suivant :
Connection.c:1169 : Avertissement : l'instruction ne fonctionne pas
Connection.c:1171 : Erreur : 'udt_Connection' n'a aucun membre nommé 'environment'
Connection .c:1172 : Avertissement : Conversion entre types de pointeurs incompatibles lors du passage du paramètre 1 (de 'Environment_CheckForError')
Connection.c:1172 : Avertissement : Conversion entre incompatibles types de pointeurs lors du passage du paramètre 2 (de 'Environment_CheckForError') Conversion entre les types de pointeurs
Connection.c:1172 : Erreur : Trop d'arguments fournis pour la fonction 'Environment_CheckForError'
Connection.c:1176 : Erreur : 'udt_Connection' n'a aucun membre nommé 'sessionHandle'
Solution :
Cette erreur ne se produit pas dans la version 5.0.3. Veuillez noter qu'il doit y avoir un répertoire d'inclusion sous ORACLE_HOME. Il doit y avoir des fichiers source requis pour la compilation dans ce répertoire. Le fichier n'est pas inclus dans Oracle Instant Client. Je l'ai copié depuis le répertoire D:/oracle/product/10.2.0/client_1/oci/include sur le client Windows.
Erreur 4.import
>>> 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 >>>
Cela est dû aux limitations de SELinux. Exécutez la commande suivante pour annuler la restriction :
chcon -t texrel_shlib_t cd $ORACLE_HOME/libnnz10.so chcon -t texrel_shlib_t cd $ORACLE_HOME/libclntsh.so.10.1
5. Erreur d'exécution
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
C'est toujours une limitation de SELinux Réglez SELinux sur désactivé
Désactivez selinux :
Exécutez la commande : vim /etc/selinux/config
Changez selinux=enforcing ou permissive en désactivé
Exécutez la commande : setenforce 0
6. problème avec le package d'installation UNICODE
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
Il est actuellement constaté que la version 5.0.3 du package provoquera une erreur lors de l'exécution de SQL, il n'est pas recommandé de l'utiliser. Remplacez-le simplement par un package non UNICODE.
Pour plus d'articles sur les problèmes courants et les solutions pour l'installation du module cx_Oracle de Python, veuillez faire attention au site Web PHP chinois !