Question

Je suis en train de construire cx_Oracle pour un Python 2.7.2 et Oracle 11g de l'installation mais le construit cx_Oracle.il ne peut donc pas trouver libclntsh.donc.11.1 ainsi, l'importation de cx_Oracle en Python échoue.

/mypath/cx_Oracle-5.1.1/build/lib.linux-x86_64-2.7-11g]$ ldd cx_Oracle.so
    libclntsh.so.11.1 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae9be290000)
    libc.so.6 => /lib64/libc.so.6 (0x00002ae9be4ab000)
    /lib64/ld-linux-x86-64.so.2 (0x000000389b600000)

J'ai libclntsh.donc.11.1 dans mon Oracle répertoire d'installation du client:

/apps/oracle/client/11.2.0.1/home1/lib]$ ls -l libclntsh.so*
libclntsh.so -> /apps/oracle/client/11.2.0.1/home1/lib/libclntsh.so.11.1
libclntsh.so.11.1

Et le cx_Oracle setup.py est la cueillette de ce dossier lib jusqu':

/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build
/apps/oracle/client/11.2.0.1/home1/
running build
running build_ext
building 'cx_Oracle' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/apps/oracle/client/11.2.0.1/home1/rdbms/demo -I/apps/oracle/client/11.2.0.1/home1/rdbms/public -I/apps/bweb/python-2.7.2/include/python2.7 -c cx_Oracle.c -o build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -DBUILD_VERSION=5.1.1
In file included from /apps/oracle/client/11.2.0.1/home1/rdbms/public/oci.h:3024,
                 from cx_Oracle.c:10:
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10788: warning: function declaration isn't a prototype
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10794: warning: function declaration isn't a prototype
gcc -pthread -shared build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -L/apps/oracle/client/11.2.0.1/home1/lib -lclntsh -o build/lib.linux-x86_64-2.7-11g/cx_Oracle.so

Est évidemment quelque chose de mal avec cette configuration?

Merci

Mise à JOUR

Mon LD_LIBRARY_PATH contient le répertoire lib ci-dessus avec libclntsh.donc.11.1

$ echo $LD_LIBRARY_PATH
/apps/oracle/client/11.2.0.1/lib

Cela ne semble pas faire de différence.- Je reconstruire le cx_Oracle.si un fichier et il montre encore libclntsh.so.11.1 => not found quand je le lance $ ldd cx_Oracle.so.

Python échec du chargement de la construit module:

Python 2.7.2 (default, Jan 19 2012, 14:38:32)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory

RÉSOLU

Le problème était lié à la LD_LIBRARY_PATH variable d'environnement.En raison des restrictions sur la configuration que je travaille avec (corp env) j'ai dû construire cx_Oracle comme un autre utilisateur (système de compte).c'est à direJ'ai été l'exécution de cette:

$ sudo -u username python27 setup.py build

Donc, même si LD_LIBRARY_PATH a été réglé correctement pour moi, ma version n'a pas été utilisé lors de la commande a été exécutée en tant qu'utilisateur différent.J'ai été en mesure de construire avec succès en déplaçant le code source à un endroit où j'ai eu des autorisations et de l'exécution de la construire comme mon utilisateur.

Était-ce utile?

La solution

Ajouter /apps/oracle/client/11.2.0.1/home1/lib/ pour votre LD_LIBRARY_PATH la variable d'environnement exécutez la commande ci-dessous dans le terminal avant de lancer python ou l'ajouter dans votre .bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/oracle/client/11.2.0.1/home1/lib/

Autres conseils

Oui.Vous avez oublié de dire à votre chargeur d'outil de cache qu'il a besoin de se regarder dans ce répertoire pour les bibliothèques.Ajouter ce répertoire à /etc/ld.so.conf ou d'un fichier similaire et exécuter ldconfig.

De nombreux produits oracle installer oraenv.Il sera mis, entre autres variables d'environnement, LD_LIBRARY_PATH, pensez donc à l'exécution de . oraenv au lieu de mettre votre environnement manuellement.

Définissez la ld_run_path .(LD_RUN_PATH est utilisé par la liaison pour spécifier où rechercher des bibliothèques uniquement au moment de l'exécution.)

Construire maintenant CX_oracle.

/mypath/cx_Oracle-5.1.1]$ export LD_RUN_PATH="/apps/oracle/client/11.2.0.1/home1/lib"
/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build

Cela ne nécessitera pas le réglage de ld_library_path tout en important cx_oracle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top