cx oracle ImportError
我遵循了本教程,在Mac上安装cx_oracle。经过一些调整后,它成功了。我之前使用过Mavericks。然后我得到了El Capitan的升级。那就是灾难的来临。
它停止工作了。我之前在目录中找不到相关文件。由于系统完整性保护,我再次完成了整个过程,并将其安装在usr/local/lib/share/oracle/installclient_11_2。
但是现在当我运行程序时。它将引发此错误消息:
1 2 3
| 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/5a70862f27d2284e9541、http://kevindalias.com/2014/03/26/how-to-set-up-cx_oracle-对于python-mac-os-x-10-89 /
对我仍然没有运气:(
欢迎提出任何建议。在此先感谢!
================================================ =========================
更新:
在网上找到了此帖子,在El Capitan上神奇地工作。删除旧的安装,按照此说明逐步进行全新操作。
- @AlexPoole,我是这样认为的。我使用以下命令:export DYLD_LIBRARY_PATH=$ORACLE_HOME
这与El Capitan中的系统完整性保护(SIP)更改有关,这尤其防止了DYLD_LIBRARY_PATH被生成的进程继承。
您可以修改cx_Oracle.so库,以使用Oracle客户端库的实际路径,而不是不再有效的搜索路径;确保您仍将ORACLE_HOME设置为指向实际的即时客户端位置,并注意应使用ImportError报告的确切路径-3071542110值可能会因Instant Client的版本/内部版本而异您已安装:
1 2 3 4 5 6
| 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:
1 2 3
| 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 |
因此,您也需要更改该库,您可能对此不太满意:
1 2 3 4
| install_name_tool -change \\
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \\
$ORACLE_HOME/libnnz11.dylib \\
$ORACLE_HOME/libclntsh.dylib.11.1 |
根据确切的客户端版本/内部版本,在运行该命令之前,可能需要使用以下命令使文件可写:
1
| chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1 |
有了这些更改,我可以在El Capitan上运行cx_Oracle测试。
更多关于install_name_change的信息。
看起来12c Instant Client的构建方式可以避免此问题,因此升级到该版本要比黑客入侵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.dyl??ib.11.1我修改了将cx_Oracle.so库修改为使用实际路径的命令。第二条命令导致:
-
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeD??efault.xctoolchain/u??sr/bin/install_name_??tool: can't open input file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dyl??ib.11.1 for writing (Permission denied) error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeD??efault.xctoolchain/u??sr/bin/install_name_??tool: can't lseek to offset: 0 in file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dyl??ib.11.1 for writing (Bad file descriptor)
-
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeD??efault.xctoolchain/u??sr/bin/install_name_??tool: can't write new headers in file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dyl??ib.11.1 (Bad file descriptor) error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeD??efault.xctoolchain/u??sr/bin/install_name_??tool: can't close written on input file: /usr/local/lib/share/oracle/instantclient_11_2/libclntsh.dyl??ib.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或类似的东西有关系吗?
-
不知道,对不起。测试对我有用,除此以外,我没有其他知识。我猜您的项目正在寻找凭证或TNS别名之类的东西。您是从这里导出ORACLE_HOME的吗?也许您的项目也需要进行设置。祝你好运。另外,请查看您是否可以删除其中一些注释,因为这些注释现在应该大部分都是多余的。
-
我使用install_name_tool遵循相同的过程,并得到了相同的错误:cx_Oracle.InterfaceError:无法获取Oracle环境句柄
-
@Eric-与Julia一样,此问题已解决了原始问题,可能看起来像项目或环境设置问题。如果您无法弄清楚,您应该专门问一个新问题。
使用
修复的示例
1
| ln -s /opt/oracle/product/12.1.0/instantclient_12_1/libclntsh.dylib.12.1 /usr/local/lib/libclntsh.dylib.12.1 |