设置依赖的加载位置

Setting dependency's loading location

首先我要说的是关于这个问题我已经讨论了多个主题,但还没有找到解决我的问题的方法。

根据我的理解,当 cx_oracle 模块想要加载其依赖项时,它会遍历 PATH 系统环境中的路径,并将加载它找到的第一个依赖项(无论其 version/operating 系统兼容性)。

我工作的环境无法保证 PATH 系统变量不会被 'old' 或不兼容的 oracle 客户端版本的目录填充,但我有一个新的保证 'point' 到正确目录的系统变量。

有什么方法可以强制 cx_oracle 模块从该位置加载库?

您可以(并且应该,只要有可能)通过使用 virtualenv or pipenv.

之类的东西对您的 Python 环境进行沙箱化来避免系统包版本问题

如果这不适合您,您可以尝试操纵当前会话的路径。

import sys
print(sys.path)

这不是我真正推荐的东西,但如果你不能解决这种情况,这可能是最后的选择。

cx_Oracle 7 在 Windows(仅)上有一个 change,它将首先尝试从与 cx_Oracle 模块相同的目录加载 Oracle 客户端库安装到。如果那里没有 Oracle 客户端,则加载回退到 OS 搜索路径(例如 PATH)。

因此,只要您可以手动将 Instant Client 添加到 Python 目录中,您就会得到想要的结果。

ODPI-C 本身不支持使用 PATH 之外的任意目录或 cx_Oracle 目录。