2017-09-07 9 views
0

J'essaye de configurer cx_Oracle pour travailler avec Python.cx_Oracle.DatabaseError: DPI-1047: la bibliothèque Oracle Client 64 bits ne peut pas être chargée: "dlopen (libclntsh.dylib, 1): image non trouvée"

J'utilise

  • Python 2.7.10, 64 bits
  • cx_Oracle Version 6.0.2
  • MacOS Sierra 10.12.6

I définir les variables d'environnement suivantes:

export ORACLE_HOME="/Volumes/DATA/Programs/PY/instantclient_12_1" 
export DYLD_LIBRARY_PATH="$ORACLE_HOME:$DYLD_LIBRARY_PATH" 
export LD_LIBRARY_PATH=$ORACLE_HOME 
export PATH=$PATH:$ORACLE_HOME 
export ORACLE_SID=edocd 
export TNS_ADMIN=/Volumes/DATA/Programs/PY/instantclient_12_1/network/admin 
export TWO_TASK=${ORACLE_SID} 

Voici ce que j'ai essayé:

  1. Installée en tant qu'administrateur
  2. sudo python setup.py build
  3. sudo python setup.py install

Quand j'ai essayé d'exécuter un script simple pour vérifier la connexion Oracle, j'ai pu connecter avec succès via sqlplus.

Voici l'erreur que je reçois:

cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "dlopen(libclntsh.dylib, 1): image not found". See https://oracle.github.io/odpi/doc/installation.html#macos for help

+1

Avez-vous suivi les instructions données à la lien trouvé dans le message d'erreur? –

Répondre

-1

cx_Oracle dans virtualenv Installation

Préalables.

Python 2.7.10, 64-bit 
cx_Oracle version 6.0.2 
MacOS Sierra 10.12.6 

client Oracle installé par des instructions https://oracle.github.io/odpi/doc/installation.html#macos dans

/opt/oracle/instantclient_12_1 

Ajouter à votre ~/.bash_profile:

export ORACLE_HOME=/opt/oracle/instantclient_12_1 
export DYLD_LIBRARY_PATH=$ORACLE_HOME 
export LD_LIBRARY_PATH=$ORACLE_HOME 
export PATH=$ORACLE_HOME:$PATH 

Essayez virtualenv

1. virtualenv ~/venv 
2. source ~/venv/bin/activate 
3. pip install IPython (Optional. I prefer IPython) 
4. pip install cx_Oracle 

(venv) ~$ pip install cx_Oracle 
Collecting cx_Oracle 
Installing collected packages: cx-Oracle 
Successfully installed cx-Oracle-6.0.2 

(venv) ~$ IPython 
Python 2.7.10 (default, Feb 7 2017, 00:08:15) 
Type "copyright", "credits" or "license" for more information. 

IPython 5.4.1 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: import cx_Oracle 

In [2]: con = cx_Oracle.connect('system/[email protected]/orcl') 

In [3]: cur = con.cursor() 
    ...: 
    ...: select = ("SELECT * FROM tbl1") 
    ...: cur.execute(select) 
    ...: 
Out[3]: <cx_Oracle.Cursor on <cx_Oracle.Connection to [email protected]/orcl>> 

In [4]: for row in cur: 
    ...:  print(row) 
    ...:  
+0

Avec les versions actuelles de macOS, SIP empêchera DYLD_LIBRARY_PATH d'être lu sous forme de sous-shell, donc cela n'aide pas vraiment et n'a pas besoin d'être défini. LD_LIBRARY_PATH est redondant sur macOS. Et avec Oracle Instant Client (et cx_Oracle 6), vous ne devez pas définir ORACLE_HOME. –

-1

Pour développer @anthony -tuininga La réponse: l'URL dans le message d'erreur a les étapes à suivre. Voir https://oracle.github.io/odpi/doc/installation.html#macos Vérifiez spécifiquement que les bibliothèques client Oracle sont dans ~/lib ou/usr/local/lib. Ne définissez pas DYLD_LIBRARY_PATH ou LD_LIBRARY_PATH ou ORACLE_HOME.

+0

Cela a réellement aidé. [Ubuntu 16.04 64bit | PyCharm 2017.3CE] –

0

Ma solution pour Ubuntu 16.04 (64 bits)

A tl; dr: du official guide:

1) Télécharger le instantclient-basic-linux.x64-12.2.0.1.0.zip

2) Extrait à/opt/oracle:

$ sudo mkdir -p /opt/oracle 
$ cd /opt/oracle 
$ unzip ~/Downloads/instantclient-basic-linux.x64-12.2.0.1.0.zip 

3) Installer libaio paquet

$ sudo apt-get install libaio1 

4) Modifiez le fichier oracle-instantclient.conf comme ceci:

$ sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf" 
$ sudo ldconfig 
+0

Merci pour le partage, mais la question était sur macOS. La solution est différente de Linux. –

0

lien ${your_instantclient_folder} ->${oracle_home}/lib

cd ${ORACLE_HOME}; 
unzip instantclient-basic-macos.x64-x.x.x.zip 
ln -s instantclient_X_X lib 

reference