installer CX oracle pour python
Je suis sur 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 (tutoriel suivi dans le lien suivant ici).
Ensuite, j'ai utilisé les scripts dans /usr/lib/oracle/xe/app/oracle/product/10.2.0/client / bin pour remplir des variables d'environnement telles que PATH, ORACLE_HOME et NLS_LANG.
Une fois que cela a été terminé, j'ai essayé de courir:
sudo easy_install cx_oracle
Mais je continue à obtenir ce qui suit erreur:
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?
8 réponses
Je vous recommande de récupérer les fichiers rpm et de les installer avec alien. De cette façon, vous pouvez plus tard exécuter apt-get purge no-longer-needed
.
Dans mon cas, , la seule variable env j'ai besoin est de LD_LIBRARY_PATH
, donc j'ai fait:
echo export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib >> ~/.bashrc
source ~/.bashrc
Je suppose que dans votre cas, cette variable path sera /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib
.
La manière alternative, qui ne nécessite pas de RPM. Vous devez être root
.
-
Dépendances
Installez les paquets suivants:
apt-get install python-dev build-essential libaio1
-
Télécharger Éphémère Client pour Linux x86-64
Téléchargez les fichiers suivants depuis le site de téléchargement D'Oracle :
-
Extraire les fichiers zip
Décompressez les fichiers zip téléchargés répertoire, j'utilise:
/opt/ora/
-
Ajouter les variables d'environnement
Créez un fichier dans
/etc/profile.d/oracle.sh
qui inclutexport 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 inclut/opt/ora/instantclient_11_2
Exécutez 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
-
Installer
cx_Oracle
paquet python-
Vous pouvez installer en utilisant
pip
pip install cx_Oracle
-
, Ou installer manuellement
Téléchargez le code source cx_Oracle zip {[33] } qui correspond à votre version Python et Oracle. Ensuite, développez l'archive et exécutez à partir du répertoire extrait:
python setup.py build python setup.py install
-
Thx Burhan Khalid, j'ai négligé 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 doit télécharger les fichiers supplémentaires nécessaires, sans avoir besoin de définir des variables d'environnement.
python -m pip install cx_Oracle --pre
Notez que l'option --pre est destinée au développement et à la pré-version du pilote Oracle. À partir de cette publication, Il était saisissant cx_Oracle-6.0rc1.tar.gz
, ce qui était nécessaire. (J'utilise Python 3.6)
Je pense que c'est peut-être le sudo n'a pas accès à get ORACLE_HOME.Vous pouvez faire comme ceci.
Sudo visudo
Modifier le texte, ajouter
Valeurs par défaut env_keep + = "ORACLE_HOME"
Puis
Sudo python setup.py construire installer
Merci Burhan Khalid. Vos conseils pour faire un lien souple font que mon installation fonctionne enfin.
Pour 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
- vous devez créer un lien logiciel (ln-s libclntsh. so. 12. 1 libclntsh.so dans mon cas)
Rien de tout cela n'est documenté nulle part, ce qui est assez incroyable et assez frustrant. J'ai passé plus de 3 heures hier avec des builds échoués parce que je ne savais pas créer un lien logiciel.
Vous pouvez également installer le module cx_Oracle sans le PIP en suivant les étapes suivantes
- Téléchargez la source à partir d'ici https://pypi.python.org/pypi/cx_Oracle [cx_Oracle-6.1.tar.gz]
-
Extraire le 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
Python setup.py construire
-
Installer le module
Python setup.py installer
Cette juste a fonctionné pour moi sur Ubuntu 16:
Télécharger ('instantclient-de base-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 faire le script suivant (vous pouvez faire pièce par pièce et je l'ai fait en tant que ROOT):
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'... Amusez-vous bien!