python3.5.4 安装 cx_Oracle步骤以及报错解决办法

安装环境:操作系统为64位,Python版本为3.5.4,oracle11g

     具体步骤如下:

1、到https://pypi.python.org/pypi/cx_Oracle/5.2.1 下载了对应的版本:cx_Oracle-5.2.1-11g.win-amd64-py3.5

a.安装过程中的错误:Python version 3.5 required, which was not found in the registry

# 解决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()

b.命令行中运行提示找不到指定的模块

import cx_Oracle

ImportError: DLL load failed: 找不到指定的模块。

这个问题的解决方法网上也说了很多,就是下载instantclient(版本要一致),然后解压将其中的oci.dll拷贝到$Python_Home 或者 $Python_Home\Lib\site-packages 目录下。运气好了,就成功了,运气不好的话可能还会出现找不到指定的模块这个问题,原因是instantclient的版本和cx_Oracle的版本不一致,拿我安装的来举例,我先下载了instantclient12c,而我的 cx_Oracle安装的是cx_Oracle-5.2.1-11g.win-amd64-py3.5,一个是11,一个是12c,这样还是出现了这个找不到指定的模块这个问题。正确做法是下载instantclient11和cx_Oracle-5.2.1-11g.win-amd64-py3.5。注意一点是cx_oracle和instantclient的版本不必和Oracle数据库版本一致,只需要cx_Oracle和instantclient版本一致即可。这样这个问题解决了,但是还有坑等着你!

c、命令行中运行提示不是有效的win32模块

import cx_Oracle

DLL load failed: %1 不是有效的 Win32 应用程序

解决方法:上一步我们讨论了版本问题,这一步该说说操作系统位数的问题了,出现这个问题的原因是操作系统、cx_Oracle和instantclient的位数不同,比如我先就是用的win10 64、cx_Oracle-5.2.1-11g.win-amd64-py3.5和instantclient11g(32位),就报了这个错误。正确做法是三者都用64或者三者都用32位系统,将instantclient的oci.dll文件放到$Python_Home\Lib\site-packages 目录下即可。

补充:虽然这样是可以使用cx_Oracle了,但是实际操作数据库的时候可能会出现unable to acquire oracle environment handle这个错误,解决方法是拷贝oci.dll, oraociei12.dll, oraocci12.dll到site-package中。另外一种方法是为instantclient11g设置环境变量,这样就不用拷贝dll文件了

本文摘自:https://blog.csdn.net/guoxinjie17/article/details/80605706

参考文献:https://blog.csdn.net/longxj04/article/details/64922138

猜你喜欢

转载自blog.csdn.net/weixin_42519759/article/details/81183385
今日推荐