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实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
python sys.argv[]用法实例详解
May 25 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
OpenCV图像颜色反转算法详解
May 13 Python
Flask-WTF表单的使用方法
Jul 12 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 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中Header使用的HTTP协议及常用方法小结
2014/11/04 PHP
php创建无限级树型菜单
2015/11/05 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
AngularJS内置指令
2015/02/04 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
js验证密码强度解析
2020/03/18 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
python如何将图片转换为字符图片
2020/08/19 Python
python去除扩展名的实例讲解
2018/04/23 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Django中URL的参数传递的实现
2019/08/04 Python
Python字符串的修改方法实例
2019/12/19 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
酒店管理求职信
2014/06/09 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
观后感的写法
2015/06/19 职场文书
高中美术教学反思
2016/02/17 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android