Debian下無root權限使用Python訪問Oracle
這篇文章的起因是,在公司的服務器上沒有root權限,但是需要使用 Python 訪問 Oracle,而不管是使用 pip 安裝組件還是安裝 Oracle 的 client,都需要相應權限。本文即解決該問題。
使用 virtualenv
使用系統自帶 Python 和 pip
安裝組件時,默認會安裝到系統目錄下,需要 root 權限才能執行寫操作。
不管是從資源隔離的角度,還是從繞過 root 的角度,你都需要一套順手的 Python 虛擬環境工具:virtualenv
。
去求運維哥哥幫忙安裝 virtualenv
吧。順便說一句,pip
和 virtualenv
在 Debian 下都可以直接使用 apt-get
python-pip
和 virtualevn
。如果服務器上沒有的話,大膽地提供單吧。
關於 virtualenv
,本文不再贅述,如有疑問,請移步我的另一篇文章《聊聊 virtualenv 和 virtualenvwrapper 實踐》。
有了 virtualenv
,就可以建立自己的 Python 虛擬環境了,在虛擬環境中不需要任何 root 權限。之後的工作都是在虛擬中進行的。
安裝 cx_Oracle
Python 中訪問 Oracle 需要使用 cx_Oracle
,此處直接使用 pip
安裝即可。
pip install cx_Oracle --pre
我碰到了一個安裝過程中提示找不到 Python.h
python-dev
包,是用 apt-get
裝的,同樣請運維幫裝上就行了。
安裝 instantclient
只是安裝完 cx_Oracle,在 import 的時候會報找不到庫。還要再安裝一下 Oracle 官方的 instantclient。下載地址在這裏,下載Instant Client Package - Basic
即可。
下載之後,進入某個有權限的目錄,假如是用戶的根目錄 ~
。將下載到的 zip 包解壓,例如到 ~/oracle/instantclient_12_2/
目錄下。之後,需要添加環境變量讓系統能夠找到這些庫。在終端的 rc 文件裏,例如 ~/.bashrc
export ORACLE_HOME=$HOME/oracle/instantclient_12_2
export LD_LIBRATY_PATH=$ORACLE_HOME:$LD_LIBRATY_PATH
export PATH=$ORACLE_HOME:$PATH
此時,還需要額外做一件事情,就是建立 libclntsh.so
的軟鏈接。
ln -s libclntsh.so.12.1 libclntsh.so
做這件事情的原因是,cx_Oracle
需要使用庫文件 libclntsh.so
,但是在解壓之後的 instantclient
中只包含帶有版本號的該庫文件,因此我們需要人工做一個軟鏈接,以供識別。
接下來,讓剛修改了環境變量的 rc 文件生效即可。
source ~/.bashrc
需要註意的是,在這次 source
之後,之前進入的虛擬環境將被退出。如果後面還需要繼續八戒影院在虛擬環境裏工作的話,需要再進入一次。
尾聲
現在,理論上應該可以在 Python 裏www.rcsx.org正常 import cx_Oracle
了。如果可以的話,說明以及可以使用了。
如果不行的話,需要補充一些報錯中提到的包。我在測試過程中發現系統中缺少 libaio1
和 libaio-dev
兩個包。一並請運維裝上就好了。
Enjoy your work ~
Debian下無root權限使用Python訪問Oracle