【问题标题】:Not understanding why I cant use use cx_Oracle with Django不明白为什么我不能在 Django 中使用 cx_Oracle
【发布时间】:2015-07-31 18:16:54
【问题描述】:

问题是我正在尝试构建一个新的 python 应用程序,但由于某些奇怪的原因,我一直遇到 cx_Oracle 的问题。任何帮助将不胜感激!!!

当我这样做时,我可以很好地导入 cx_Oracle。

 programmer@ubuntu:~/Python_app$ python
 Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
 [GCC 4.8.2] on linux2
 Type "help", "copyright", "credits" or "license" for more information. 
 >>> import cx_Oracle
 >>> 

 >>> cx_Oracle 
 <module 'cx_Oracle' from '/usr/local/lib/python2.7/dist-packages/cx_Oracle.so'>

但是当我做这样的事情时

 programmer@ubuntu:~/Python_app$ sudo python manage.py startapp help_desk

我收到这个错误

Error loading cx_Oracle module: libclntsh.so.11.1: cannot open shared object file: No such file or directory

我已经检查并重新检查了我的路径,但我无法找出问题所在。这是我的路径

programmer@ubuntu:~/Python_app$ echo $ORACLE_HOME
/opt/oracle/instantclient_11_2

programmer@ubuntu:~/Python_app$ echo $LD_LIBRARY_PATH 
/opt/oracle/instantclient_11_2

这是我的 /opt/oracle/instantclient_11_2 的概要

programmer@ubuntu:/opt/oracle/instantclient_11_2$ tree

 ├── adrci
 ├── BASIC_README
 ├── genezi
 ├── glogin.sql
 ├── libclntsh.so -> libclntsh.so.11.1
 ├── libclntsh.so.11.1
 ├── libnnz11.so
 ├── libocci.so.11.1
 ├── libociei.so
 ├── libocijdbc11.so 
 ├── libsqlplusic.so
 ├── libsqlplus.so
 ├── ojdbc5.jar
 ├── ojdbc6.jar 
 ├── sdk
 │   ├── demo
     │   │   ├── cdemo81.c
     │   │   ├── demo.mk
     │   │   ├── occidemod.sql
     │   │   ├── occidemo.sql
     │   │   ├── occidml.cpp
     │   │   ├── occiobj.cpp
     │   │   └── occiobj.typ
 │   ├── include
     │   │   ├── ldap.h
     │   │   ├── nzerror.h
     │   │   ├── nzt.h
     │   │   ├── occiAQ.h
     │   │   ├── occiCommon.h
     │   │   ├── occiControl.h
     │   │   ├── occiData.h
     │   │   ├── occi.h
     │   │   ├── occiObjects.h
     │   │   ├── oci1.h
     │   │   ├── oci8dp.h
     │   │   ├── ociap.h
     │   │   ├── ociapr.h
     │   │   ├── ocidef.h
     │   │   ├── ocidem.h
     │   │   ├── ocidfn.h
     │   │   ├── ociextp.h
     │   │   ├── oci.h
     │   │   ├── ocikpr.h
     │   │   ├── ocixmldb.h
     │   │   ├── ocixstream.h
     │   │   ├── odci.h
     │   │   ├── oratypes.h
     │   │   ├── orid.h
     │   │   ├── ori.h
     │   │   ├── orl.h
     │   │   ├── oro.h
     │   │   ├── ort.h
     │   │   └── xa.h
     │   ├── ott
     │   ├── ottclasses.zip
     │   └── SDK_README
 ├── sqlplus
 ├── SQLPLUS_README
 ├── uidrvci
 └── xstreams.jar

当我在没有 sudo 的情况下尝试这个命令时,我得到了这个

 programmer@ubuntu:~/Python_app$ python manage.py startapp help_desk
 CommandError: [Errno 13] Permission denied: '/home/programmer/Python_app/help_desk'

根据评论,我认为这与我的权限有关,这里是 opt/oracle/instantclient_11_2 的权限

  -rwxrwxr-x 1 root root     25420 Aug 24  2013 adrci
  -rw-rw-r-- 1 root root       439 Aug 24  2013 BASIC_README
  -rwxrwxr-x 1 root root     47860 Aug 24  2013 genezi
  -r-xr-xr-x 1 root root       368 Aug 24  2013 glogin.sql
  lrwxrwxrwx 1 root root        17 May 19 14:53 libclntsh.so -> libclntsh.so.11.1
  -rwxrwxr-x 1 root root  53865194 Aug 24  2013 libclntsh.so.11.1
  -r-xr-xr-x 1 root root   7996693 Aug 24  2013 libnnz11.so
  -rwxrwxr-x 1 root root   1973074 Aug 24  2013 libocci.so.11.1
  -rwxrwxr-x 1 root root 118738042 Aug 24  2013 libociei.so
  -r-xr-xr-x 1 root root    164942 Aug 24  2013 libocijdbc11.so
  -r-xr-xr-x 1 root root   1502287 Aug 24  2013 libsqlplusic.so
  -r-xr-xr-x 1 root root   1469542 Aug 24  2013 libsqlplus.so
  -r--r--r-- 1 root root   2091135 Aug 24  2013 ojdbc5.jar
  -r--r--r-- 1 root root   2739616 Aug 24  2013 ojdbc6.jar
  drwxrwxr-x 4 root root      4096 Aug 24  2013 sdk
  -r-xr-xr-x 1 root root      9320 Aug 24  2013 sqlplus
  -rw-rw-r-- 1 root root       443 Aug 24  2013 SQLPLUS_README
  -rwxrwxr-x 1 root root    192365 Aug 24  2013 uidrvci
  -rw-rw-r-- 1 root root     66779 Aug 24  2013 xstreams.jar

还有一点很奇怪,它可以使用 python shell 导入 cx_Oracle 模块,但是在尝试创建新应用程序时不能这样做。 所以我不确定发生了什么。

【问题讨论】:

  • 在没有sudo 的情况下运行它会发生什么?
  • 我在没有 sudo 的情况下尝试过,这就是我得到的程序员@ubuntu:~/Python_app$ python manage.py startapp help_desk CommandError: [Errno 13] Permission denied: '/home/programmer/Python_app/帮助台'@mmmmmpie
  • 我认为您在安装中搞砸了权限。部分(如果不是全部)oracle 文件归 root 所有,但您的用户拥有正确的变量和路径设置。
  • 这很有道理,你会建议我做什么来解决这个问题?我应该 chown 程序员 /opt/oracle/instantclient/ @mmmmmpie
  • 你可以试试。重新安装需要付出多少努力?

标签: python django oracle11g cx-oracle


【解决方案1】:

好的,我想通了。是的,这与我的权限有关。 sudo 看不到 ORACLE_HOME,所以我所做的只是将 Defaults env_keep += "ORACLE_HOME" 添加到 sudo visudo 并工作!感谢您的帮助@mmmmmpie。

【讨论】:

  • 请注意...不要以 root 身份运行应用程序/数据库。
  • 我是一名 Rails 开发人员,正在慢慢转向使用 python,所以 Rails 的 oracle 的 gem 是 ruby​​-OCI8,这有时是工作的噩梦,我很确定这就是为什么我的数据库是 root 只是因为对 OCI8 感到恼火的简单事实,我想安装它,所以重新安装了所有东西,没有任何问题,因为用户不是 root,而且一切正常。但是无论如何感谢您的建议@mmmmmpie
猜你喜欢
  • 2021-11-21
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多