【发布时间】: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 错误。
我们尝试在此论坛或其他论坛中遵循以前的解决方案,但它们不适用于我们:
-
https://github.com/oracle/python-cx_Oracle/issues/210 (with https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html#ic_x64_inst) -> 除了“每步 3”部分不适用之外,我们都一样 -> 我们在 Instantclient 下载中没有任何
.so文件 -
DPI-1047: 64-bit Oracle Client library cannot be loaded - 我们使用
python -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'验证了我们都使用 64 位 python,此线程中的其余部分适用于 Windows -
How to fix: cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library - Python - 我和她都没有 /usr/lib/oracle 文件夹,需要明确设置版本;事实上,下载的文件夹已经包含指向正确版本的
.dylib的软链接(我们也尝试让它指向其他.dylib版本)
感谢您的帮助! c.
【问题讨论】:
-
如果您可以升级到 Python 3,则使用 cx_Oracle 8,它有一个新的
init_oracle_client()函数,您可以将 Instant Client 目录传递给该函数。见stackoverflow.com/a/62587663/4799035
标签: python oracle macos cx-oracle