python安裝cxOracle避坑總結(jié)不要直接pip install
轉(zhuǎn)自http://rookiefly.cn/detail/69
作死小能手這兩天閑著沒(méi)事,把自己電腦重裝了,然而重裝過(guò)后配置開(kāi)發(fā)環(huán)境踩了一些坑,這里把安裝cx_oracle遇到的坑記錄下來(lái),方便以后查看。
使用pip安裝出現(xiàn)的問(wèn)題
命令:
pip install cx_oracle
錯(cuò)誤:
Unable to find vcvarsall.bat
我用了最簡(jiǎn)單粗暴的方法:由于我的操作系統(tǒng)是win10 64位,所以我安裝了vs2015,很遺憾報(bào)的錯(cuò)誤更多了!由于以前我沒(méi)用pip安裝都可以成功安裝,所以我舍棄了這種安裝方式
到官網(wǎng)下載相應(yīng)版本的驅(qū)動(dòng)進(jìn)行安裝
我的操作系統(tǒng)為64位,Python版本為3.5.2,所以我到https://pypi.python.org/pypi/cx_Oracle/5.2.1 下載了對(duì)應(yīng)的版本:cx_Oracle-5.2.1-12c.win-amd64-py3.5
1.安裝過(guò)程中的錯(cuò)誤:
Python version 3.5 required, which was not found in the registry
解決方法: 網(wǎng)上看了很多種解決方法,很多是說(shuō)的修改注冊(cè)表,這種方式我試了,但是沒(méi)成功,最后找到這個(gè)方法,成功了。運(yùn)行下面這個(gè)腳本,不管是Python3.x還是2.x都可以加入注冊(cè)表中:
# 解決windows平臺(tái)下找不到python的注冊(cè)信息問(wèn)題 (安裝oracle驅(qū)動(dòng)會(huì)用)
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()
為了防止直接從網(wǎng)頁(yè)復(fù)制運(yùn)行失敗的情況,我把它放到了github上,可以直接下載運(yùn)行:register.py
2.命令行中運(yùn)行提示找不到指定的模塊
import cx_Oracle
ImportError: DLL load failed: 找不到指定的模塊。
這個(gè)問(wèn)題的解決方法網(wǎng)上也說(shuō)了很多,就是下載instantclient,然后解壓將其中的oci.dll拷貝到$Python_Home 或者 $Python_Home\Lib\site-packages 目錄下。
運(yùn)氣好了,就成功了,運(yùn)氣不好的話可能還會(huì)出現(xiàn)找不到指定的模塊這個(gè)問(wèn)題,原因是instantclient的版本和cx_Oracle的版本不一致,拿我安裝的來(lái)舉例,我先下載了instantclient11,而我的 cx_Oracle安裝的是cx_Oracle-5.2.1-12c.win-amd64-py3.5,一個(gè)是11,一個(gè)是12c,這樣還是出現(xiàn)了這個(gè)找不到指定的模塊這個(gè)問(wèn)題。
正確做法是下載instantclient12和cx_Oracle-5.2.1-12c.win-amd64-py3.5。
注意一點(diǎn)是cx_oracle和instantclient的版本不必和Oracle數(shù)據(jù)庫(kù)版本一致,只需要cx_Oracle和instantclient版本一致即可。
這樣這個(gè)問(wèn)題解決了,但是還有坑等著你!
3.命令行中運(yùn)行提示不是有效的win32模塊
import cx_Oracle
DLL load failed: %1 不是有效的 Win32 應(yīng)用程序
解決方法:上一步我們討論了版本問(wèn)題,這一步該說(shuō)說(shuō)操作系統(tǒng)位數(shù)的問(wèn)題了,出現(xiàn)這個(gè)問(wèn)題的原因是操作系統(tǒng)、cx_Oracle和instantclient的位數(shù)不同,比如我先就是用的win10 64、cx_Oracle-5.2.1-12c.win-amd64-py3.5和instantclient12c(32位),就報(bào)了這個(gè)錯(cuò)誤。
正確做法是三者都用64或者三者都用32位系統(tǒng),將instantclient的oci.dll文件放到$Python_Home\Lib\site-packages 目錄下即可。
到此,應(yīng)該可以解決cx_oracle安裝過(guò)程的所有問(wèn)題了,祝大家好運(yùn)!
補(bǔ)充:雖然這樣是可以使用cx_Oracle了,但是實(shí)際操作數(shù)據(jù)庫(kù)的時(shí)候可能會(huì)出現(xiàn)unable to acquire oracle environment handle這個(gè)錯(cuò)誤,解決方法是拷貝oci.dll, oraociei12.dll, oraocci12.dll到site-package中。
另外一種方法是為instantclient12c設(shè)置環(huán)境變量,這樣就不用拷貝dll文件了
以上就是python安裝cxOracle避坑總結(jié)不要直接pip install了的詳細(xì)內(nèi)容,更多關(guān)于python安裝cxOracle避坑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python函數(shù)的周期性執(zhí)行實(shí)現(xiàn)方法
這篇文章主要介紹了Python函數(shù)的周期性執(zhí)行實(shí)現(xiàn)方法,涉及Python使用sched模塊實(shí)現(xiàn)函數(shù)周期性調(diào)度觸發(fā)的相關(guān)技巧,需要的朋友可以參考下2016-08-08
python可視化大屏庫(kù)big_screen示例詳解
提到數(shù)據(jù)可視化,我們會(huì)想到 Plotly、Matplotlib、Pyecharts等可視化庫(kù),或者一些商用軟件Tableau、FineBI等等。如果你希望操作更簡(jiǎn)單、展現(xiàn)效果更強(qiáng)大,那么這款工具 big_screen 更適合2021-11-11
Python獲取系統(tǒng)所有進(jìn)程PID及進(jìn)程名稱的方法示例
這篇文章主要介紹了Python獲取系統(tǒng)所有進(jìn)程PID及進(jìn)程名稱的方法,涉及Python使用psutil對(duì)系統(tǒng)進(jìn)程進(jìn)行操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05
python練習(xí)之曾經(jīng)很火的小人畫(huà)愛(ài)心表白代碼
小編有個(gè)好兄弟最近在追妹子,跟妹子打得火熱!就差臨門一腳了,這一jio我?guī)兔ρa(bǔ)上去了!他問(wèn)有沒(méi)有什么酷炫的表白方式,可以給人心動(dòng)的趕jio,表白的方式有許多種今天小編來(lái)教大家一個(gè)之前很火的小人畫(huà)愛(ài)心表白代碼2021-09-09
在Python中使用cookielib和urllib2配合PyQuery抓取網(wǎng)頁(yè)信息
這篇文章主要介紹了在Python中使用cookielib和rllib2配合PyQuery抓取網(wǎng)頁(yè)信息的教程,主要是利用PyQuery解析HTML來(lái)實(shí)現(xiàn),需要的朋友可以參考下2015-04-04
Python 按字典dict的鍵排序,并取出相應(yīng)的鍵值放于list中的實(shí)例
今天小編就為大家分享一篇Python 按字典dict的鍵排序,并取出相應(yīng)的鍵值放于list中的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python調(diào)用實(shí)現(xiàn)最小二乘法的方法詳解
所謂線性最小二乘法,可以理解為是解方程的延續(xù),區(qū)別在于,當(dāng)未知量遠(yuǎn)小于方程數(shù)的時(shí)候,將得到一個(gè)無(wú)解的問(wèn)題。本文主要和大家分享Python調(diào)用實(shí)現(xiàn)最小二乘法的方法,需要的可以參考一下2023-04-04
cv2.imread?和?cv2.imdecode?用法及區(qū)別
對(duì)于路徑中含有中文的圖像,直接用cv2.imread讀取會(huì)報(bào)錯(cuò),上次看到有大佬使用cv2.imdecode就可以正常讀取,有點(diǎn)好奇,所以今天來(lái)記錄下二者用法和區(qū)別,感興趣的朋友跟隨小編一起看看吧2023-02-02
Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程
這篇文章主要介紹了Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

