如何在El Capitan上安装cx_Oracle

时间:2015-10-21 12:44:18

标签: python oracle macos cx-oracle osx-elcapitan

据我了解,有一些与SIP相关的变化使得安装变得困难。

这些页面有安装的背景和建议。 http://sourceforge.net/p/cx-oracle/mailman/message/34534872/http://stefanoapostolico.com/2015/10/08/install_cx_oracle_with_sip_enabled.html

把所有这些放在一起,这是我最好的把它安装到我的virtualenv,但唉,仍然没有好处。

我得到的错误是:

$ cd /Users/me/sx_direct_env/lib/python2.7
$ mkdir oracle
$ cd oracle
$ export ORACLE_HOME=$PWD
$ export DYLD_LIBRARY_PATH=$ORACLE_HOME
$ export LD_LIBRARY_PATH=$ORACLE_HOME
$ export PATH=$PATH:$ORACLE_HOME
$ unzip ~/Downloads/instantclient-basic-macos.x64-11.2.0.4.0.zip
$ unzip ~/Downloads/instantclient-sdk-macos.x64-11.2.0.4.0.zip
$ mv instantclient_11_2/* .
$ rmdir instantclient_11_2
$ curl -O https://raw.githubusercontent.com/kubo/fix_oralib_osx/master/fix_oralib.rb
$ ruby -a fix_oralib.rb 
adrci:
   add rpath: @loader_path
   change install name
     from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
       to: @rpath/libclntsh.dylib.11.1
   change install name
     from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib
       to: @rpath/libnnz11.dylib

genezi:
   add rpath: @loader_path
   change install name
     from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
       to: @rpath/libclntsh.dylib.11.1

libclntsh.dylib.11.1:
   add rpath: @loader_path
   change identification name
     from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
       to: @rpath/libclntsh.dylib.11.1
   change install name
     from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib
       to: @rpath/libnnz11.dylib

libnnz11.dylib:
   change identification name
     from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib
       to: @rpath/libnnz11.dylib

libocci.dylib.11.1:
   change identification name
     from: /ade/b/3071542110/oracle/rdbms/lib/libocci.dylib.11.1
       to: @rpath/libocci.dylib.11.1

libociei.dylib:
   add rpath: @loader_path
   change install name
     from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
       to: @rpath/libclntsh.dylib.11.1

libocijdbc11.dylib:
   add rpath: @loader_path
   change install name
     from: /ade/b/2475221476/oracle/rdbms/lib/libclntsh.dylib.11.1
       to: @rpath/libclntsh.dylib.11.1
   change install name
     from: /ade/b/2475221476/oracle/ldap/lib/libnnz11.dylib
       to: @rpath/libnnz11.dylib

uidrvci:
   add rpath: @loader_path
   change install name
     from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
       to: @rpath/libclntsh.dylib.11.1
   change install name
     from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib
       to: @rpath/libnnz11.dylib

$ pip install cx_oracle
Collecting cx-oracle
Installing collected packages: cx-oracle
Successfully installed cx-oracle-5.2

$ python -c "import cx_Oracle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: dlopen(/Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /b/227/rdbms/lib/libclntsh.dylib.10.1
  Referenced from: /Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so
  Reason: image not found

以下是我的所有安装步骤:

=IF(ISBLANK(INDEX('DATA 1'!C:C,MATCH(OUTPUT!B27,'DATA 1'!A:A,0))),INDEX('DATA 1'!B:B,MATCH(OUTPUT!B27,'DATA 1'!A:A,0)),INDEX('DATA 1'!C:C,MATCH(OUTPUT!B27,'DATA 1'!A:A,0)))

5 个答案:

答案 0 :(得分:8)

我在尝试使用Oracle instantclient 12.1 尝试安装cx_Oracle时尝试了上述操作并出现以下错误:

[535]: /opt/instantclient_12_1 $ python -c "import cx_Oracle"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): 
        Library not loaded: @rpath/libclntsh.dylib.12.1
  Referenced from: /Library/Python/2.7/site-packages/cx_Oracle.so
  Reason: image not found

注意错误中的 @rpath - 结果是在El Capitan上构建cx_Oracle库(对于instantclient 12.1)时,gcc编译器需要-rpath标志被设置为知道在哪里找到上述动态链接库(* .dylib)。默认情况下,在instantclient 12.1上, pip 不会为您执行此操作。

# Set -rpath option before installing...this will use $ORACLE_HOME during compilation
export FORCE_RPATH=TRUE
pip install cx_Oracle
# And verify cx_Oracle was correctly installed
python -c "import cx_Oracle"
# If this line fails install cx_Oracle with:
#   pip install --no-cache-dir --allow-external --allow-unverified cx_oracle

python -c "import cx_Oracle"应该报告没有错误。

有关完整的安装指南(包括即时客户端下载和配置),请查看我在http://thelaziestprogrammer.com/sharrington/databases/oracle/install-cx_oracle-mac的帖子了解详细信息。

答案 1 :(得分:2)

感谢Greg的指示。

我必须为我的cx_Oracle pip install创建一个符号链接(使用上面提供的参数)。您可能希望将这些添加到您的说明中。

ln -s libclntsh.dylib.11.1 libclntsh.dylib

我还根据本安装指南中的建议为libocci创建了另一个链接:https://gist.github.com/thom-nic/6011715

ln -s libocci.dylib.11.1 libocci.dylib

答案 2 :(得分:0)

我想我修好了。基本上我上面发布的所有步骤都是正确的。

但我最终使用它来进行pip安装,以确保它下载一个新副本并重建(并且可能会获得更高版本?)

$ pip install --no-cache-dir --allow-external --allow-unverified cx_oracle

然后我可以毫无问题地导入cx_oracle,但是当连接到外部服务器时,我收到错误“'ORA-21561:OID生成失败'。”

然后我跟着instructions here并在/ etc / hosts文件中添加了一个带有主机名的行,现在一切正常。

例如,在/ etc / hosts

的末尾添加了这样的行

127.0.0.1 localhost my-host-name

答案 3 :(得分:0)

要在OS X上安装cx_Oracle,请下载64位Instant Client basic&amp;来自http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html的OS X的sdk包。使用此版本的Instant Client,您可以连接到10g,11g和12c数据库。此版本的链接方式可以避免Apple最近引入的SIP问题(影响Instant Client 11.2)。

然后运行类似:

unzip instantclient-basic-macos.x64-12.1.0.2.0.zip
unzip instantclient-sdk-macos.x64-12.1.0.2.0.zip
cd instantclient_12_1
ln -s libclntsh.dylib.12.1 libclntsh.dylib
cd ..
export ORACLE_HOME=`pwd`/instantclient_12_1
export FORCE_RPATH=1
pip install cx_Oracle

您可能需要或不需要其他pip选项,如https://stackoverflow.com/a/33284974/4799035

中所述

答案 4 :(得分:0)

另请注意: 如果您的python运行为32位,并将cx_Oracle安装为64位,您也将遇到此问题。 要避免此问题,请始终以超级用户的身份运行您的命令&#39; su&#39;并清楚地了解&#39; su&#39; python是32位或64位。 检查你的python位How do I determine if my python shell is executing in 32bit or 64bit mode on OS X?

强制使用64位运行:

arch -x86_64 / usr / bin / python27

强制使用32位运行:

默认写入com.apple.versioner.python Prefer-32-Bit -bool yes