Debian下無root權限使用Python訪問Oracle

Debian 下無 root 權限使用 Python 訪問 Oracle

這篇文章的原由是,在公司的服務器上沒有root權限,可是須要使用 Python 訪問 Oracle,而無論是使用 pip 安裝組件仍是安裝 Oracle 的 client,都須要相應權限。本文即解決該問題。html

使用 virtualenv

使用系統自帶 Python 和 pip 安裝組件時,默認會安裝到系統目錄下,須要 root 權限才能執行寫操做。python

無論是從資源隔離的角度,仍是從繞過 root 的角度,你都須要一套順手的 Python 虛擬環境工具:virtualenvlinux

去求運維哥哥幫忙安裝 virtualenv 吧。順便說一句,pipvirtualenv 在 Debian 下均可以直接使用 apt-get 安裝,對應的包分別是 python-pipvirtualevn。若是服務器上沒有的話,大膽地提供單吧。segmentfault

關於 virtualenv,本文再也不贅述,若有疑問,請移步個人另外一篇文章《聊聊 virtualenv 和 virtualenvwrapper 實踐》。bash

有了 virtualenv,就能夠創建本身的 Python 虛擬環境了,在虛擬環境中不須要任何 root 權限。以後的工做都是在虛擬中進行的。服務器

安裝 cx_Oracle

Python 中訪問 Oracle 須要使用 cx_Oracle,此處直接使用 pip 安裝便可。oracle

pip install cx_Oracle --pre

我碰到了一個安裝過程當中提示找不到 Python.h 文件的,這說明系統中缺乏 python-dev 包,是用 apt-get 裝的,一樣請運維幫裝上就好了。app

安裝 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 里正常 import cx_Oracle 了。若是能夠的話,說明以及可使用了。

若是不行的話,須要補充一些報錯中提到的包。我在測試過程當中發現系統中缺乏 libaio1libaio-dev 兩個包。一併請運維裝上就行了。

Enjoy your work ~

相關文章
相關標籤/搜索