2012-07-11 61 views
0

我在CentOS 6.2上安裝了cx_Oracle。當我從外殼導入庫,它工作正常,但是當我通過WSGI啓動它,我得到的錯誤:cx_Oracle使用mod_wsgi環境運行

ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory 

這是一個環境變量的問題:cx_Oracle沒有找到路徑到lib。

我試圖提供的解決方案here

我在/ usr/lib目錄

增加了一個鏈接到libclntsh.so.10.1(其中Ln)我已編輯apache的配置和添加:

ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib 
LD_LIBRARY_PATH=$ORACLE_HOME/ 
PATH=$ORACLE_HOME/bin:$PATH 

我編輯/etc/ld.so.conf中並加入:

/usr/lib/oracle/11.2/client64/lib 

ldconfig命令後進行

我試圖用Python和:

os.env['ORACLE_HOME']='/usr/lib/oracle/11.2/client64/lib' 

我編輯的.bashrc有:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib 
export LD_LIBRARY_PATH=$ORACLE_HOME/ 
export PATH=$ORACLE_HOME/bin:$PATH 

我還編輯的apachectl與

ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib 
export ORACLE_HOME 
LD_LIBRARY_PATH=$ORACLE_HOME/ 
export LD_LIBRARY_PATH 
PATH=$ORACLE_HOME/bin:$PATH 
export PATH 

我運行出於想法。有什麼建議麼 ?

回答

0

而不是在cx_Oracle rpm上使用yum install,我下載了庫的源代碼並運行setup.py構建。

我會指向我試圖找到在即時客戶端SDK庫函數的錯誤:

possibleIncludeDirs = ["rdbms/demo", "rdbms/public", "network/public","sdk/include"] 

瀏覽ORACLE_HOME文件夾,我發現其中安裝在lib的SDK文件文件夾(我使用yum install在oracle的rpm上安裝了skd),並且不在possibleIncludeDirs中,或在安裝程序中建議的include文件夾中。潘岳:

if not includeDirs: 
     path = os.path.join(oracleLibDir, "include") 
     if os.path.isdir(path): 
      includeDirs.append(path) 
    if not includeDirs: 
     path = re.sub("lib(64)?", "include", oracleHome) 
     if os.path.isdir(path): 
      includeDirs.append(path) 

我下載了即時客戶端SDK(該ZIP文件這段時間),並已解壓到lib文件夾。

有那麼lib文件夾中(/usr/lib/oracle/11.2/client64/lib)

接着我就推出了setup.py構建和setup.py的安裝和它的工作一個SDK文件夾。

1

當你編譯for Oracle的Python模塊,設置:

LD_RUN_PATH=/usr/lib/oracle/11.2/client64/lib 

用戶環境變量和導出。這將導致該目錄被嵌入到Python擴展模塊.so文件中,並且會在運行時知道在哪裏找到它,而無需設置LD_LIBRARY_PATH環境變量。

對於標準的Apache發行版(Linux發行版經常有點不同),設置額外環境變量的文件被稱爲'envvars',並且與'httpd'位於同一目錄中。對於Linux發行版經常需要使用特殊的init.d啓動腳本。

因此,查找LD_RUN_PATH的全部內容。

相關問題