Maison  >  Article  >  développement back-end  >  Problèmes courants et solutions pour l'installation du module cx_Oracle en python

Problèmes courants et solutions pour l'installation du module cx_Oracle en python

高洛峰
高洛峰original
2017-02-24 15:00:491648parcourir

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 !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn