gpt4 book ai didi

macOS 上的 Python "DPI-1047 Cannot locate dlopen(libclntsh.dylib)"

转载 作者:行者123 更新时间:2023-12-05 09:30:59 31 4
gpt4 key购买 nike

我收到以下错误。

cx_Oracle.DatabaseError:DPI-1047:无法加载 64 位 Oracle Client 库:“dlopen(libclntsh.dylib,1):找不到图像”

我发现的一个修复方法是插入cx_Oracle.init_oracle_client(lib_dir=path)导致Oracle Client Library has already been initialized Error。

但是我没有在代码中的任何地方调用 init_oracle_client。我在 Mac 上使用 Python 3.8.11 和 cx_Oracle 8.2.1。

当我最初运行代码时,我没有安装任何 Oracle 客户端。然后我下载了 instantclient_19_8,但是将它与 init_oracle_client 一起使用会导致已经初始化的错误。我在这里看到了https://cx-oracle.readthedocs.io/en/latest/user_guide/initialization.html .

我不确定 cx_Oracle 二进制文件在哪里,当我转到具有当前 anaconda 环境的位置时,我看到一个包含自述文件的 cx_Oracle-doc 文件夹。另外,在~中创建了一个oradiag_my_username文件夹。不确定需要修复什么。

最佳答案

现在最简单的解决方案是使用最新的 cx_Oracle 版本,它已重命名为 python-oracledb,请参阅 release announcement .这不需要 Oracle 客户端库(它们是可选的)。

如果你使用cx_Oracle(或者python-oracledb的Thick模式),你可以这样使用:

import os
import platform
if platform.system() == "Darwin":
cx_Oracle.init_oracle_client(lib_dir=os.environ.get("HOME")+"/Downloads/instantclient_19_8")

这是最方便的解决方案。如果您遇到“已初始化”错误,那么如果您使用的是 cx_Oracle 8,请确保每个 Python 进程只调用 init_oracle_client() 一次。如果您使用的是新版本 ( renamed to python-oracledb ),那么只要参数相同,就可以多次调用 init_oracle_client()

或者,您可以像这样找到您的 cx_Oracle 二进制文件:

cjones@mac:~$ python
Python 3.9.6 (default, Aug 20 2021, 13:36:17)
[Clang 12.0.5 (clang-1205.0.22.11)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> cx_Oracle
<module 'cx_Oracle' from '/Users/cjones/.local/lib/python3.9/site-packages/cx_Oracle.cpython-39-darwin.so'>

然后,在终端窗口中,执行如下操作:

ln -s $HOME/Downloads/instantclient_19_8/libclntsh.dylib $HOME/.local/lib/python3.9/site-packages

这是针对 macOS 的——任何阅读本文的 Linux 用户都应该知道该解决方案不适用于 Linux。

oradiag_xxx 目录用于 Oracle“客户端”跟踪。您可以随时删除它。

关于macOS 上的 Python "DPI-1047 Cannot locate dlopen(libclntsh.dylib)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69165050/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com