- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到以下错误。
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/
我是一名优秀的程序员,十分优秀!