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 相关文章推荐
python中map()与zip()操作方法
Feb 27 Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
替换python字典中的key值方法
Jul 06 Python
python使用多进程的实例详解
Sep 19 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
python实现用户名密码校验
Mar 18 Python
用python计算文件的MD5值
Dec 23 Python
教你怎么用python实现字符串转日期
May 24 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
Laravel下生成验证码的类
2017/11/15 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
javascript事件模型代码
2007/07/01 Javascript
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Python对List中的元素排序的方法
2018/04/01 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
Python如何转换字符串大小写
2020/06/04 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
高考自主招生自荐信
2013/10/20 职场文书
一体化教学实施方案
2014/05/10 职场文书
个人承诺书格式
2014/06/03 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
西柏坡导游词
2015/02/05 职场文书
靠谱的活动总结
2019/04/16 职场文书
Python Parser的用法
2021/05/12 Python
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
关于Python使用turtle库画任意图的问题
2022/04/01 Python
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏
利用Java连接Hadoop进行编程
2022/06/28 Java/Android