2016-02-05 238 views
2

我跟着this tutorial在Mac上安装cx_oracle。经过一些调整,它是成功的。我之前正在使用小牛队。然后我得到了一个升级到埃尔卡皮坦。这就是灾难进来。CX甲骨文导入错误

它停止工作。我在前面的目录中找不到相关的文件。由于System Integrity Protection,我经历了整个过程,并再次安装此在usr/local/lib/share/oracle/installclient_11_2

但现在当我运行该程序。它抛出这个错误消息:

ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 
    Referenced from: /Library/Python/2.7/site-packages/cx_Oracle.so 
    Reason: image not found 

我尝试了很多解决方案的在线,像https://gist.github.com/rmoff/5a70862f27d2284e9541http://kevindalias.com/2014/03/26/how-to-set-up-cx_oracle-for-python-on-mac-os-x-10-89/

仍然没有运气上我:(

任何建议,欢迎在此先感谢

=============================================== ===========================

UPDATE:

发现this post在线,神奇的作品在埃尔卡皮坦。按照本指导逐步删除旧安装,重新开始安装。

+0

@AlexPoole我是这么认为的。我使用以下命令:'export DYLD_LIBRARY_PATH = $ ORACLE_HOME ' – Julia

回答

7

这与system integrity protection (SIP) changes in El Capitan有关,其中防止DYLD_LIBRARY_PATH被spawned processes继承。

您可以修改cx_Oracle.so库使用Oracle客户端库而不是不再适用于搜索路径的实际路径;请确保您的ORACLE_HOME仍然设置为指向您的实际即时客户端位置,并且请注意应使用由ImportError报告的确切路径 - 3071542110值可能因您安装的Instant Client的版本/内部版本而异:

export ORACLE_HOME=/usr/local/lib/share/oracle/installclient_11_2 

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 

...但随后该库无法找到另一个Oracle之一:

ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib 
    Referenced from: /usr/local/lib/share/oracle/installclient_11_2/libclntsh.dylib.11.1 
    Reason: image not found 

所以你需要更改该库也一样,你可能是不太舒服:

install_name_tool -change \ 
    /ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \ 
    $ORACLE_HOME/libnnz11.dylib \ 
    $ORACLE_HOME/libclntsh.dylib.11.1 

根据具体客户端版本/ BUILD您可能需要运行该命令,与之前使文件可写:

chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1 

这些变化,我可以运行在埃尔卡皮坦的cx_Oracle测试。

更多插入install_name_changehere


它看起来像12C的即时客户端已建成以避免这个问题的一种方式,因此升级到被锣比黑客周围诠释他11g的文件简单。

+0

Alex对你很好。 我试图重新安装整个事情(确保一切都是64位)。当我运行该项目时,它得到了一个ImportError:'ImportError:dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so,2):未加载的库:/ ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11 .dylib 引用自:/ usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1' 我修改了修改cx_Oracle.so库以使用实际路径的命令。第二个命令导致: – Julia

+0

'错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:无法打开输入文件:/ usr/local/lib/share/oracle /instantclient_11_2/libclntsh.dylib.11.1写入(权限被拒绝) 错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:无法取消偏移:文件中为0 :/usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1用于写入(坏文件描述符) ' – Julia

+0

'错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool:无法在文件中写入新标头:/usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1(错误文件描述符) 错误:/Applications/Xcode.app/Contents/Developer /Toolchains/XcodeDefault.xctoolchain/usr/bin/in stall_name_tool:无法关闭写入输入文件:/usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1(错误文件描述符)' – Julia

-1

样品修复与

ln -s /opt/oracle/product/12.1.0/instantclient_12_1/libclntsh.dylib.12.1 /usr/local/lib/libclntsh.dylib.12.1