1. 程式人生 > >python中cx_Oracle模組安裝遇到的問題與解決方法

python中cx_Oracle模組安裝遇到的問題與解決方法

     安裝或使用cx_Oracle時,需要用到Oracel的連結庫,如libclntsh.so.10.1,否則會有各種各樣的錯誤資訊。

     安裝Oracle Instant Client就可得到這個連結庫,避免安裝幾百兆之巨的Oracle Client。

軟體下載地址:

常見的錯誤和解決方法:

一.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時報錯。

[[email protected] ~]# 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

解決方法:

從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引數,否則還會報上述錯誤

[[email protected] ~]# 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/[email protected]")
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的包就沒問題了。

相關推薦

pythoncx_Oracle模組安裝遇到的問題解決方法

     安裝或使用cx_Oracle時,需要用到Oracel的連結庫,如libclntsh.so.10.1,否則會有各種各樣的錯誤資訊。      安裝Oracle Instant Client就可得到這個連結庫,避免安裝幾百兆之巨的Oracle Client。 軟體下載

區分pythonrandom模組的randintnumpy.random模組的randint

random.randint(a, b) # 返回閉區間 [a, b] 範圍內的整數值 numpy.random.randint(a, b) # 返回開區間 [a, b) 範圍內的整數值 >>> random.randint(0,1

Python】區分pythonrandom模組的randintnumpy.random模組的randint

這簡直就是python一個大坑random.randint(a, b)     # 返回閉區間 [a, b] 範圍內的整數值numpy.random.randint(a, b)   # 返回開區間 [a, b) 範圍內的整數值>>> random.randi

Python的對象行為特殊方法(一)對象的創建銷毀

連接 繼承 並不會 參數 asa rac 方式 垃圾收集 shell Python中類調用__new__()類方法來創建實例,調用__init__()方法來初始化對象,對象的銷毀則調用__del__()方法。 __new__()方法第一個參數為類cls,通常返回cls的一個

python f.write寫入中文出錯解決方法

一個出錯的例子 #coding:utf-8 s = u'中文' f = open("test.txt","w") f.write(s) f.close() 原因是編碼方式錯誤,應該改為utf-8編碼 解決方案一: #coding:utf-8 s = u'中文' f

python使用pip安裝報錯:Fatal error in launcher... 解決方法

python安裝了2和3版本在 cmd 中用pip報的錯誤為:Fatal error in launcher:Unable to create process using 這是因為你安裝了python3和python2在你的windows下,並且在環境變數中分別配置了pip,可是並沒有區分pip3還是p

python模組的介紹使用方法,第三方模組的手動安裝

  什麼是Python模組: Python 模組(Module),是一個 Python 檔案,以 .py 結尾,包含了 Python 物件定義和Python語句。 模組讓你能夠有邏輯地組織你的 Python 程式碼段。      

**pythonatexit模組 register函式**

python中atexit模組 與register函式 register函式函式模型: register函式的作用: register函式位於atexie模組,是程式結束時的退出清理函式 register函式的使用例子: 一:atexit.register(fu

Pythonlxml模組安裝

lxml是Python中與XML及HTML相關功能中最豐富和最容易使用的庫。lxml並不是Python自帶的包,而是為libxml2和libxslt庫的一個Python化的繫結。它與眾不同的地方是它兼

CentOSredis以及pythonredis模組安裝

CentOS下redis的安裝 1.下載redis的安裝包 2.tar -zxfz redis-3.2.0.tar.gz 進行解壓 3.進入其安裝目錄底下 4.make安裝 5.啟動服務端    

pythonJupyter Notebook庫的安裝安裝失敗的解決方法學習

一、Jupyter notebook的認識Jupyter Notebook(此前被稱為 IPython notebook)是一個互動式筆記本,支援執行 40 多種程式語言。其本質是一個 Web 應用程式,它執行以網頁的形式存在,便於建立和共享文學化程式文件,支援實時程式碼,數

pythonrequests模組有些網站不能訪問解決方案

python學習中爬取網站視訊時由於python本身不能地址限制的原因,不能直接用response = requests.get(url)獲取到網頁原始碼,進而無法爬取網站資訊。 我以貓眼網為例: 訪問貓眼程式碼如下: import requests

解決pythonargparse模組add_argument問題

這個東西,用於從命令列讀取引數。 用法: import argparse parser=argparse.ArgumentParser() parser.add_argument("echo",help="echo the string") args=parser.parse_args()

Python第三方模組安裝

1、自編寫模組 既然一個.py檔案即為一個模組,所以直接將自己編寫的Python模組檔案放入$Python\Lib資料夾內,便可以呼叫;如何解決模組搜尋路徑帶來的ImportError問題?請點這裡 2、第三方模組和包 下載第三方模組和包到本地,模組一

Python BeautifulSoup模組安裝

                  ps:(/Python32--表示Python的安裝目錄 /setuptools -- 表示之前下載的setuptools安裝包的目錄名 / beautifulsoup4-4.4.0 --表示之前下載的beautifulsoup安裝包的目錄名 )請根據自己的實際情況更改

如何安裝Python模組

自我介紹 人家說我師出名門時,我笑了~我只說我是一個一直對女朋友好的人~專注機器學習、資料探勘3年;一直有深入理解資料結構的計劃;一直有攻克OJ題目的決心;一直對英語有著執著的信念;一直在實習NLP演算法工程師。。。

程式設計過程遇到的python問題解決方法_來自網路

1、python操作mysql中文顯示亂碼的解決方法 簡介: 已解決 http://www.jb51.net/article/56086.htm 2、自己程式設計中遇到的Python錯誤和解決方法彙

pythondatetime模組的strftimestrptime

python中datetime模組非常好用,提供了日期格式和字串格式相互轉化的函式strftime/strptime 1、由日期格式轉化為字串格式的函式為: datetime.datetime.strftime() 2、由字串格式轉化為日期格式的函式為: dateti

zabbix   監控平臺搭建過程的報錯解決方法總結

監控 zabbix 運維自動化1.php option post_max_size 2.php option max_execution_time 3.php option max_input_time 4.php time zone 5.php bcm

Nginx 安裝過程遇到的一些問題及解決方法

requires nbsp margin req 命令 裝包 ... check sbin 一、安裝 獲取安裝包: wget http://nginx.org/download/nginx-1.11.5.tar.gz 解壓安裝包: tar -zxvf nginx-1.11