cx oracle ImportError

Jul*_*lia 2 oracle macos python-2.7

我按照本教程在Mac上安装cx_oracle.经过一些调整后,它成功了.我之前正在使用小牛队.然后我升级到El Capitan.这就是灾难发生的地方.

它停止了工作.我之前在目录中找不到相关文件.由于系统完整性保护,我再次完成整个过程并安装在此处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
Run Code Online (Sandbox Code Playgroud)

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

我仍然没有运气:(

欢迎任何建议.提前致谢!

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

更新:

在线发现这篇文章,神奇地在El Capitan上工作.删除旧安装,按照此步骤逐步开始.

Ale*_*ole 7

这与El Capitan中系统完整性保护(SIP)更改有关,这可能会阻止DYLD_LIBRARY_PATH由生成的进程继承.

您可以修改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
Run Code Online (Sandbox Code Playgroud)

...但是那个库找不到另一个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
Run Code Online (Sandbox Code Playgroud)

所以你也需要改变那个库,你可能不太习惯:

install_name_tool -change \
  /ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
  $ORACLE_HOME/libnnz11.dylib \
  $ORACLE_HOME/libclntsh.dylib.11.1
Run Code Online (Sandbox Code Playgroud)

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

chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
Run Code Online (Sandbox Code Playgroud)

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

更多关于install_name_change 这里.


看起来12c即时客户端的构建方式可以避免这个问题,所以升级到它就比在11g文件中进行黑客攻击更简单.