python安装cx_Oracle模块常见问题与解决方法


Posted in Python onFebruary 21, 2017

本文实例讲述了python安装cx_Oracle模块常见问题与解决方法。分享给大家供大家参考,具体如下:

安装或使用cx_Oracle时,需要用到Oracel的链接库,如libclntsh.so.10.1,否则会有各种各样的错误信息。

安装Oracle Instant Client就可得到这个链接库,避免安装几百兆之巨的Oracle Client。

软件下载地址:

cx_Oracle的主页:http://cx-oracle.sourceforge.net/
必需的Oracle链接库的下载地址:http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

常见的错误和解决方法:

一.win32二进制安装

在windows下安装cx_Oracle-5.0-10g.win32-py2.6.msi之后,导入时,报DLL加载失败的错误,如下:

IDLE 2.6.1

>>> import cx_Oracle
Traceback (most recent call last):
 File "<pyshell#0>", line 1, in <module>
  import cx_Oracle
ImportError: DLL load failed: 找不到指定的程序。

解决方法:

从Oracle站点下载instantclient-basic-win32-10.2.0.4.zip,解压后,将其中的oci.dll文件复制到Python安装目录的Lib/site-packages下,如 C:/Python26/Lib/site-packages

二.linux下二进制安装

在linux_x86_64下,安装cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm时报错。

[root@BJ-UPDATE-01 ~]# rpm -ivh cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
error: Failed dependencies:
    libclntsh.so.10.1()(64bit) is needed by cx_Oracle-5.0.1-1.x86_64

解决方法:

参考http://cx-oracle.sourceforge.net/BUILD.txt

从Oracle站点下载basic-10.2.0.4.0-linux-x86_64.zip到/opt目录并解压,会看到libclntsh.so.10.1在/opt/instantclient_10_2目录中

设置环境变量

vi /root/.bash_profile

增加如下两行:

export ORACLE_HOME=/opt/instantclient_10_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

运行source /root/.bash_profile使改动生效

建立此链接库的符号链接

cd $ORACLE_HOME
ln -s libclntsh.so.x.x libclntsh.so

重新安装cx_Oracle

注意加--nodeps参数,否则还会报上述错误

[root@BJ-UPDATE-01 ~]# rpm -ivh --nodeps cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
#5.0.3版本不用加--nodeps参数

三.linux下源代码安装

设置环境变量及符号链接如上,在linux_x86_64下源代码安装,运行python setup.py build,编译时错误信息如下:

Connection.c:1169: 警告:语句不起作用
Connection.c:1171: 错误:'udt_Connection' 没有名为 'environment' 的成员
Connection.c:1172: 警告:传递参数 1 (属于 'Environment_CheckForError')时在不兼容的指针类型间转换
Connection.c:1172: 警告:传递参数 2 (属于 'Environment_CheckForError')时在不兼容的指针类型间转换
Connection.c:1172: 错误:提供给函数 'Environment_CheckForError' 的实参太多
Connection.c:1176: 错误:'udt_Connection' 没有名为 'sessionHandle' 的成员

解决方法:

5.0.3版本的未出现此错误,要注意ORACLE_HOME下要有include目录,这个目录中要有编译需要的源文件,源文件在Oracle Instant Client这个客户端中没有包含。我是从windows客户端的D:/oracle/product/10.2.0/client_1/oci/include这个目录中拷贝的。

四.import错误

>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
>>>

这是因为SELinux的限制,运行如下命令取消限制:

chcon -t texrel_shlib_t cd $ORACLE_HOME/libnnz10.so
chcon -t texrel_shlib_t cd $ORACLE_HOME/libclntsh.so.10.1

五、运行时错误

Traceback (most recent call last):
 File "oracle_conn.py", line 9, in ?
  connection = cx_Oracle.Connection(u"oracle/oracle123@CCIP")
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

还是SELinux的限制,设置SELinux为disabled

关掉selinux:

运行命令:  vim /etc/selinux/config
将selinux=enforcing或permissive改成disabled
运行命令:  setenforce 0

六. UNICODE的安装包有问题

Traceback (most recent call last):
 File "./oracle_conn.py", line 22, in ?
  folderIds=cursor.fetchmany(10)
cx_Oracle.DatabaseError: OCI-22061: Message 22061 not found; No message file for product=RDBMS, facility=OCI; arguments: [T

目前发现5.0.3版的包在执行SQL时会导致报错,不建议使用,换成非UNICODE的包就没问题了。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python3基础之list列表实例解析
Aug 13 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
Python中类的定义、继承及使用对象实例详解
Apr 30 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
django DRF图片路径问题的解决方法
Sep 10 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
学python安装的软件总结
Oct 12 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
Feb 16 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
python3 中使用urllib问题以及urllib详解
Aug 03 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
Python实现字符串格式化的方法小结
Feb 20 #Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 #Python
Python 模块EasyGui详细介绍
Feb 19 #Python
Python中字符串格式化str.format的详细介绍
Feb 17 #Python
Python爬虫:通过关键字爬取百度图片
Feb 17 #Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 #Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 #Python
You might like
php中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP读取xml方法介绍
2013/01/12 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
简单实现php上传文件功能
2017/09/21 PHP
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
初学python数组的处理代码
2011/01/04 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
python调用百度语音识别api
2018/08/30 Python
Numpy之random函数使用学习
2019/01/29 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Django工程的分层结构详解
2019/07/18 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
数控技术与应用毕业生自荐信
2013/09/24 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
新生入学欢迎词
2015/01/26 职场文书
校园广播稿范文
2015/08/19 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL