【问题标题】:cx oracle ImportErrorcx oracle ImportError
【发布时间】:2016-05-15 21:23:24
【问题描述】:

我关注this tutorial 在 Mac 上安装 cx_oracle。经过一些调整,它成功了。我之前使用的是 Mavericks。然后我得到了升级到 El Capitan。这就是灾难发生的地方。

它停止工作。我之前在目录中找不到相关文件。由于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/

我还是没有运气:(

欢迎提出任何建议。提前致谢!

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

更新:

在网上找到 this post,在 El Capitan 上神奇地工作。删除旧安装,按照此说明一步一步重新开始。

【问题讨论】:

  • @AlexPoole 我想是的。我使用以下命令:export DYLD_LIBRARY_PATH=$ORACLE_HOME

标签: oracle macos python-2.7


【解决方案1】:

使用

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

【讨论】:

    【解决方案2】:

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

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

    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
    

    根据确切的客户端版本/构建,您可能需要在运行该命令之前使文件可写,使用:

    chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
    

    通过这些更改,我可以在 El Capitan 上运行 cx_Oracle 测试。

    更多关于install_name_changehere


    看起来 12c 即时客户端的构建方式避免了此问题,因此升级到该客户端比破解 11g 文件更简单。

    【讨论】:

    • 你真好,亚历克斯。我试图重新安装整个东西(确保一切都是 64 位的)。当我运行该项目时,它得到一个 ImportError:ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib Referenced from: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1 我修改了修改 cx_Oracle.so 库的命令以使用实际路径。第二个命令导致:
    • error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: can't open input file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1 for writing (Permission denied) error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: can't lseek to offset: 0 in file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1 for writing (Bad file descriptor)
    • error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: can't write new headers in file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1 (Bad file descriptor) error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: can't close written on input file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dylib.11.1 (Bad file descriptor)
    • 好的,你现在有11.2.0.4的即时客户端;这很好,但这似乎是用不同的权限构建的。在运行第二步之前只需chmod 755 libclntsh.dylib.11.1
    • 看起来差不多了。现在当我运行项目时。我没有得到 ImportError。是cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle 和 LD_LIBRARY_PATH 或类似的有什么关系吗?
    猜你喜欢
    • 2018-12-10
    • 2013-01-31
    • 1970-01-01
    • 2017-06-03
    • 2021-11-26
    • 1970-01-01
    • 2012-12-23
    • 2019-11-07
    • 2019-04-17
    相关资源
    最近更新 更多