据我了解,有一些与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)))
答案 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