Sous Debian 5, j'ai essayé d'installer le module cx_Oracle pour python sans succès. Tout d'abord, j'ai installé Oracle-xe-client et sa dépendance (suivi du tutoriel dans le lien suivant ici ).
Ensuite, j'ai utilisé les scripts de /usr/lib/Oracle/xe/app/Oracle/product/10.2.0/client/bin pour renseigner des variables d'environnement telles que PATH, Oracle_HOME et NLS_LANG.
Une fois cela terminé, j'ai essayé de lancer:
Sudo easy_install cx_Oracle
Mais je continue à avoir l'erreur suivante:
Searching for cx-Oracle
Reading http://pypi.python.org/simple/cx_Oracle/
Reading http://cx-Oracle.sourceforge.net
Reading http://starship.python.net/crew/atuining
Best match: cx-Oracle 5.0.4
Downloading http://prdownloads.sourceforge.net/cx-Oracle/cx_Oracle-5.0.4.tar.gz?download
Processing cx_Oracle-5.0.4.tar.gz
Running cx_Oracle-5.0.4/setup.py -q bdist_Egg --dist-dir /tmp/easy_install-xsylvG/cx_Oracle-5.0.4/Egg-dist-tmp-8KoqIx
error: cannot locate an Oracle software installation
Une idée de ce que j'ai manqué ici?
Je vous recommande de récupérer les fichiers rpm et de les installer avec alien. De cette façon, vous pourrez plus tard exécuter apt-get purge no-longer-needed
.
Dans mon cas , la seule variable env dont j'avais besoin est LD_LIBRARY_PATH
;
echo export LD_LIBRARY_PATH=/usr/lib/Oracle/11.2/client/lib >> ~/.bashrc
source ~/.bashrc
Je suppose que dans votre cas cette variable de chemin sera /usr/lib/Oracle/xe/app/Oracle/product/10.2.0/client/lib
.
La méthode alternative ne nécessite pas de RPM. Vous devez être root
.
Dépendances
Installez les packages suivants:
apt-get install python-dev build-essential libaio1
Télécharger Instant Client pour Linux x86-64
Téléchargez les fichiers suivants à partir du site de téléchargement de Oracle :
Extraire les fichiers Zip
Décompressez les fichiers Zip téléchargés dans un répertoire, j'utilise:
/opt/ora/
Ajouter des variables d'environnement
Créez un fichier dans /etc/profile.d/Oracle.sh
qui comprend
export Oracle_HOME=/opt/ora/instantclient_11_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME
Créez un fichier dans /etc/ld.so.conf.d/Oracle.conf
qui comprend
/opt/ora/instantclient_11_2
Exécuter la commande suivante
Sudo ldconfig
_ {Remarque: vous devrez peut-être redémarrer pour appliquer les paramètres} _
Créer un lien symbolique
cd $Oracle_HOME
ln -s libclntsh.so.11.1 libclntsh.so
Install cx_Oracle
package python
Vous pouvez installer avec pip
pip install cx_Oracle
Ou installez manuellement
Téléchargez le fichier cx_Oracle source Zip qui correspond à votre version Python et Oracle. Développez ensuite l'archive et exécutez-la à partir du répertoire extrait:
python setup.py build
python setup.py install
Thx Burhan Khalid, j'ai oublié votre citation "Vous devez être root", mais j'ai trouvé le chemin quand vous n'êtes pas la racine ici .
Au point 7, vous devez utiliser:
Sudo env Oracle_HOME=$Oracle_HOME python setup.py install
Ou
Sudo env Oracle_HOME=/path/to/instantclient python setup.py install
Ce qui suit a fonctionné pour moi, à la fois sur Mac et Linux. Cette commande devrait télécharger les fichiers supplémentaires nécessaires, sans qu'il soit nécessaire de définir des variables d'environnement.
python -m pip install cx_Oracle --pre
Remarque, l'option --pre est destinée au développement et à la pré-version du pilote Oracle. Au moment de cette publication, il récupérait cx_Oracle-6.0rc1.tar.gz
, ce qui était nécessaire. (J'utilise Python 3.6)
Je pense que c'est peut-être que le Sudo n'a pas accès à Oracle_HOME. Vous pouvez faire comme ça.
Sudo visudo
modifier le texte ajouter
Valeurs par défaut env_keep + = "Oracle_HOME"
puis
Sudo python setup.py construire installer
Merci Burhan Khalid. Votre conseil pour faire un lien symbolique fait que mon installation fonctionne enfin.
Récapituler:
Vous avez besoin à la fois de la version de base et de la version SDK de Instant Client.
Vous devez définir à la fois LD_LIBRARY_PATH et Oracle_HOME
Rien de tout cela n’est documenté nulle part, ce qui est assez incroyable et assez frustrant. Hier, j'ai passé plus de 3 heures avec des versions en échec parce que je ne savais pas créer un lien souple.
Sinon, vous pouvez installer le module cx_Oracle sans le PIP en procédant comme suit.
Extrayez le fichier tar en utilisant les commandes suivantes (Linux)
gunzip cx_Oracle-6.1.tar.gz
tar -xf cx_Oracle-6.1.tar
cd cx_Oracle-6.1
Construire le module
construction de python.py
Installer le module
installation de python.py
Cela a juste fonctionné pour moi Ubuntu 16:
Téléchargez ('instantclient-basic-linux.x64-12.2.0.1.0.Zip' et 'instantclient-sdk-linux.x64-12.2.0.1.0.Zip') à partir du site Web Oracle, puis exécutez le script suivant (vous pouvez faire morceau par morceau et j'ai fait comme une racine):
apt-get install -y python-dev build-essential libaio1
mkdir -p /opt/ora/
cd /opt/ora/
## Now put 2 Zip files:
# ('instantclient-basic-linux.x64-12.2.0.1.0.Zip' and 'instantclient-sdk-linux.x64-12.2.0.1.0.Zip')
# into /opt/ora/ and unzip them -> both will be unzipped into 1 directory: /opt/ora/instantclient_12_2
rm -rf /etc/profile.d/Oracle.sh
echo "export Oracle_HOME=/opt/ora/instantclient_12_2" >> /etc/profile.d/Oracle.sh
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$Oracle_HOME" >> /etc/profile.d/Oracle.sh
chmod 777 /etc/profile.d/Oracle.sh
source /etc/profile.d/Oracle.sh
env | grep -i ora # This will check current ENVIRONMENT settings for Oracle
rm -rf /etc/ld.so.conf.d/Oracle.conf
echo "/opt/ora/instantclient_12_2" >> /etc/ld.so.conf.d/Oracle.conf
ldconfig
cd $Oracle_HOME
ls -lrth libclntsh* # This will show which version of 'libclntsh' you have... --> needed for following line:
ln -s libclntsh.so.12.1 libclntsh.so
pip install cx_Oracle # Maybe not needed but I did it anyway (only pip install cx_Oracle without above steps did not work for me...)
Vos scripts python sont maintenant prêts à utiliser 'cx_Oracle' ... Enjoy!
Si vous essayez d'installer sous MAC, décompressez simplement le client Oracle que vous avez téléchargé et placez-le dans le dossier où vous avez écrit les scripts python.
Il y a trop de problème de configuration des variables environnementales. Cela a fonctionné pour moi.
J'espère que cela t'aides.
Merci