【问题标题】:Oracle DPI-1047 on macOS 10.14.6 with Python 2.7.10macOS 10.14.6 上的 Oracle DPI-1047 和 Python 2.7.10
【发布时间】:2020-08-20 01:59:25
【问题描述】:

我对以下情况感到很困惑:我和一位同事都使用 Mac OS X。我使用 10.15.3、python 2.7.15、GCC 4.2.1、cx_Oracle 7.0.0 和 SQL Developer 19.1.0。她使用 10.14.6、python 2.7.10、GCC 4.2.1、cx_Oracle 7.3.0 和 SQL Developer 18.3.0。

我们有一个简单的 python 脚本,它通过cx_Oracle 连接到数据库。我们得到了通常的 DPI-1047 错误。我按照这里的说明https://oracle.github.io/odpi/doc/installation.html#macos 和最新的 19“基本”版本,并且由于公证 (https://github.com/oracle/python-cx_Oracle/issues/341#issuecomment-541794557) 进行了一些调整,我可以让它工作:.dylib 文件被正确拾取并且代码可以连接到数据库。

对于我的同事,找不到该文件。我们按照与我的计算机完全相同的步骤,首先下载 19,然后下载 18“基本”版本(天真地认为它与 SQL Developer 版本有关),解压缩,并将链接添加到 $LD_LIBRARY_PATH 变量。但是,仍然会弹出 DPI-1047 错误。

我们尝试在此论坛或其他论坛中遵循以前的解决方案,但它们不适用于我们:

感谢您的帮助! c.

【问题讨论】:

  • 如果您可以升级到 Python 3,则使用 cx_Oracle 8,它有一个新的 init_oracle_client() 函数,您可以将 Instant Client 目录传递给该函数。见stackoverflow.com/a/62587663/4799035

标签: python oracle macos cx-oracle


【解决方案1】:

总的来说,您在 10.14.6 (Mojave) 计算机上遇到了问题。

我最初的想法是您使用的是操作系统默认的 Python。这行不通,因为 Apple 已将其锁定。来自install instructions:“确保您没有使用捆绑的 Python。它的权利受到限制,并且将无法加载 Oracle 客户端库。” (我没有/不能冒险破解 Instant Client 以查看它是否可以工作)

但是,Python 2.7.10 是从哪里来的?我的系统默认是 Python 2.7.16。

不要设置 LD_LIBRARY_PATH。相反,我的 ~/lib 目录只有一个符号链接:

libclntsh.dylib -> /Users/cjones/instantclient_19_3/libclntsh.dylib

所有配置问题都是由于 Apple 日益严格的安全要求造成的。希望下一个 Oracle Instant Client 版本能够使其更易于使用。

SQL Developer 与 Python cx_Oracle 的使用几乎完全无关(除非您在 SQL Developer 中使用厚 JDBC 连接,这种情况很少见)。

并且不要在 macOS 上遵循 Linux 或 Windows 的说明!

【讨论】:

  • 感谢 Christopher 的回复,我会将其转发给我的同事。希望它能真正解决问题。
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 2019-12-06
  • 2019-01-06
  • 2019-02-02
  • 2021-06-25
  • 2020-04-13
  • 2018-08-25
  • 2020-03-22
相关资源
最近更新 更多