设为首页 收藏本站
查看: 729|回复: 0

[经验分享] 安装cx_oracle遇到的问题

[复制链接]

尚未签到

发表于 2018-9-6 07:00:37 | 显示全部楼层 |阅读模式
  作死小能手这两天闲着没事,把自己电脑重装了,然而重装过后配置开发环境踩了一些坑,这里把安装cx_oracle遇到的坑记录下来,方便以后查看。
使用pip安装出现的问题
  命令:
  pip install cx_oracle
  错误:
  Unable to find vcvarsall.bat
  我用了最简单粗暴的方法:由于我的操作系统是win10 64位,所以我安装了vs2015,很遗憾报的错误更多了!由于以前我没用pip安装都可以成功安装,所以我舍弃了这种安装方式
到官网下载相应版本的驱动进行安装
  我的操作系统为64位,Python版本为3.5.2,所以我到https://pypi.python.org/pypi/cx_Oracle/5.2.1 下载了对应的版本:cx_Oracle-5.2.1-12c.win-amd64-py3.5
  1.安装过程中的错误:
  Python version 3.5 required, which was not found in the registry
  解决方法: 网上看了很多种解决方法,很多是说的修改注册表,这种方式我试了,但是没成功,最后找到这个方法,成功了。运行下面这个脚本,不管是Python3.x还是2.x都可以加入注册表中:
  # 解决windows平台下找不到python的注册信息问题 (安装oracle驱动会用)
  
from winreg import *
  
import sys
  # tweak as necessary
  
version = sys.version[:3]
  
installpath = sys.prefix
  regpath = "SOFTWARE\Python\Pythoncore\{0}\".format(version)
  
installkey = "InstallPath"
  
pythonkey = "PythonPath"
  
pythonpath = "{0};{1}\Lib\;{2}\DLLs\".format(
  installpath, installpath, installpath)
  def RegisterPy():
  try:
  reg = OpenKey(HKEY_CURRENT_USER, regpath)
  except EnvironmentError as e:
  try:
  reg = CreateKey(HKEY_CURRENT_USER, regpath)
  SetValue(reg, installkey, REG_SZ, installpath)
  SetValue(reg, pythonkey, REG_SZ, pythonpath)
  CloseKey(reg)
  except:
  print(" Unable to register!")
  return
  print("--- Python", version, "is now registered!")
  return
  if (QueryValue(reg, installkey) == installpath and
  QueryValue(reg, pythonkey) == pythonpath):
  CloseKey(reg)
  print("=== Python", version, "is already registered!")
  return
  CloseKey(reg)
  print(" Unable to register!")
  print("*** You probably have another Python installation!")
  if name == "main":
  RegisterPy()
  为了防止直接从网页复制运行失败的情况,我把它放到了github上,可以直接下载运行:register.py
  2.命令行中运行提示找不到指定的模块
  import cx_Oracle
  ImportError: DLL load failed: 找不到指定的模块。
  这个问题的解决方法网上也说了很多,就是下载instantclient,然后解压将其中的oci.dll拷贝到$Python_Home 或者 $Python_Home\Lib\site-packages 目录下。运气好了,就成功了,运气不好的话可能还会出现找不到指定的模块这个问题,原因是instantclient的版本和cx_Oracle的版本不一致,拿我安装的来举例,我先下载了instantclient11,而我的 cx_Oracle安装的是cx_Oracle-5.2.1-12c.win-amd64-py3.5,一个是11,一个是12c,这样还是出现了这个找不到指定的模块这个问题。正确做法是下载instantclient12和cx_Oracle-5.2.1-12c.win-amd64-py3.5。注意一点是cx_oracle和instantclient的版本不必和Oracle数据库版本一致,只需要cx_Oracle和instantclient版本一致即可。这样这个问题解决了,但是还有坑等着你!
  3.命令行中运行提示不是有效的win32模块
  import cx_Oracle
  DLL load failed: %1 不是有效的 Win32 应用程序
  解决方法:上一步我们讨论了版本问题,这一步该说说操作系统位数的问题了,出现这个问题的原因是操作系统、cx_Oracle和instantclient的位数不同,比如我先就是用的win10 64、cx_Oracle-5.2.1-12c.win-amd64-py3.5和instantclient12c(32位),就报了这个错误。正确做法是三者都用64或者三者都用32位系统,将instantclient的oci.dll文件放到$Python_Home\Lib\site-packages 目录下即可。
  到此,应该可以解决cx_oracle安装过程的所有问题了,祝大家好运!
  补充:虽然这样是可以使用cx_Oracle了,但是实际操作数据库的时候可能会出现unable to acquire oracle environment handle这个错误,解决方法是拷贝oci.dll, oraociei12.dll, oraocci12.dll到site-package中。另外一种方法是为instantclient12c设置环境变量,这样就不用拷贝dll文件了



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563730-1-1.html 上篇帖子: Oracle专题15之包 下篇帖子: ORACLE SQL 查询练手
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表