python安装cxOracle避坑总结不要直接pip install
转自http://rookiefly.cn/detail/69
作死小能手这两天闲着没事,把自己电脑重装了,然而重装过后配置开发环境踩了一些坑,这里把安装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文件了
以上就是python安装cxoracle避坑总结不要直接pip install了的详细内容,更多关于python安装cxoracle避坑的资料请关注其它相关文章!
上一篇: Java多线程基础