Ash*_*win 2 python oracle macos cx-oracle
我收到以下错误。
cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "dlopen(libclntsh.dylib, 1): image not found"。
我发现的一个解决方法是插入
cx_Oracle.init_oracle_client(lib_dir=path)导致 Oracle 客户端库已初始化错误。
但是我不会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,请参阅发布公告。这不需要 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")
Run Code Online (Sandbox Code Playgroud)
这是最方便的解决方案。如果您收到“已初始化”错误,那么如果您使用的是 cx_Oracle 8,请确保每个 Python 进程仅调用init_oracle_client() 一次。如果您使用的是新版本(重命名为 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'>
Run Code Online (Sandbox Code Playgroud)
然后,在终端窗口中执行以下操作:
ln -s $HOME/Downloads/instantclient_19_8/libclntsh.dylib $HOME/.local/lib/python3.9/site-packages
Run Code Online (Sandbox Code Playgroud)
这是针对 macOS 的 - 任何阅读本文的 Linux 用户都应该知道该解决方案不适用于 Linux。
该oradiag_xxx目录用于 Oracle“客户端”跟踪。您可以随时删除它。
| 归档时间: |
|
| 查看次数: |
6530 次 |
| 最近记录: |