1.安裝XCode from App Store
安裝cx_Oracle需要cc命令龙致,而這個(gè)命令是和XCode一起的
2.下載oracle instant client
選擇相應(yīng)的版本,下載兩個(gè)文件
- instantclient-basic-10.2.0.4.0-macosx-x64.zip
- instantclient-sdk-10.2.0.4.0-macosx-x64.zip
3.安裝oracle instant client
①創(chuàng)建一個(gè)主目錄
比如下面的Oracle目錄就是我創(chuàng)建的
/Users/sgrchan/Documents/Oracle
②將上面下好的兩個(gè)包(basic和sdk)解壓至①中的目錄
解壓效果如圖。圖好像沒(méi)了妨托。土童。
會(huì)涉及到幾次移動(dòng)拷貝的操作汽煮,最終達(dá)到圖中的效果即可
③解壓ottclasses.zip 經(jīng)測(cè)試聊倔,這一步不需要
/Users/sgrchan/Documents/Oracle/instantclient_11_2/sdk
會(huì)產(chǎn)生一個(gè)oracle目錄
④執(zhí)行命令 經(jīng)測(cè)試,這一步不需要
cd /Users/sgrchan/Documents/Oracle/instantclient_11_2
cp -R ./sdk/* .
cp -R ./sdk/include/* .
⑤修改/etc/profile,增加下面三行
export ORACLE_HOME=/Users/sgrchan/Documents/Oracle/instantclient_11_2
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME
⑥讓環(huán)境變量生效
source /etc/profile
⑦鏈接庫(kù)文件
/Users/sgrchan/Documents/Oracle/instantclient_11_2
ln -s libclntsh.dylib.11.1 libclntsh.dylib
ln -s libocci.dylib.11.1 libocci.dylib
其中谱秽,sdk為sdk壓縮包解壓出來(lái)的目錄洽蛀;其他文件為basic壓縮包解壓出來(lái)的文件;兩個(gè)軟鏈接需要我們自己創(chuàng)建
4.安裝cx_Oracle
# Mac OS X 默認(rèn)沒(méi)有pip弯院,所以需要安裝一下
sudo easy_install pip
# 執(zhí)行的時(shí)候會(huì)報(bào)錯(cuò)辱士,提示沒(méi)有找到oracle客戶端。
# 所以下面我們需要先安裝一下听绳。 需要用root執(zhí)行K痰狻!椅挣!
pip install cx_Oracle
5.測(cè)試連接oracle
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import cx_Oracle
print(os.environ.get("ORACLE_HOME")) # 打印三個(gè)環(huán)境變量
print(os.environ.get("LD_LIBRARY_PATH"))
print(os.environ.get("DYLD_LIBRARY_PATH"))
db=cx_Oracle.connect('life','lifepass','127.0.0.1:60005/orcl')
print db.version # 打印數(shù)據(jù)庫(kù)版本
db.close()
前面的print結(jié)果顯示头岔,環(huán)境變量 LD_LIBRARY_PATH和DYLD_LIBRARY_PATH獲取不到值!J笾ぁ峡竣!
然后執(zhí)行到連接的代碼會(huì)有如下報(bào)錯(cuò)
Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
而經(jīng)過(guò)大半天的谷歌,終于找到了解決方法
cd $ORACLE_HOME
install_name_tool -change \
/ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 \
$ORACLE_HOME/libclntsh.dylib.11.1 \
/Library/Python/2.7/site-packages/cx_Oracle.so
install_name_tool -change \
/ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
/Users/sgrchan/Documents/Oracle/instantclient_11_2/libclntsh.dylib.11.1
而后重新執(zhí)行測(cè)試語(yǔ)句量九,發(fā)現(xiàn)上面的報(bào)錯(cuò)是沒(méi)了适掰,但是又出現(xiàn)了如下報(bào)錯(cuò)
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
網(wǎng)上說(shuō)的各種解決方法都無(wú)法解決問(wèn)題颂碧。
究其原因,就是因?yàn)樯厦嬲f(shuō)的print結(jié)果顯示类浪,環(huán)境變量 LD_LIBRARY_PATH和DYLD_LIBRARY_PATH 獲取不到值载城。
這是由于OS X 升級(jí)到EI之后加入的SIP機(jī)制,導(dǎo)致第三方程序不能獲取到這些環(huán)境變量费就!
只要關(guān)閉SIP即可诉瓦。
6.關(guān)閉SIP
- 關(guān)機(jī)-開(kāi)機(jī)-按住CMD+R-等待進(jìn)入恢復(fù)模式
- 工具-終端-執(zhí)行如下命令
- csrutil disable
當(dāng)然,如果要重新打開(kāi)SIP的話力细,換成enable即可睬澡。
最后重新測(cè)試一下連接數(shù)據(jù)庫(kù),終于一切正常了眠蚂!