Linux profile.d 环境变量不适用于 Python 中的 cx_oracle

Linux profile.d environment variables don't work with cx_oracle in Python

这是我之前问题的延续:

在能够正确安装 cx_oracle 之后,我想设置我的环境,这样就不必每次都导出环境变量。

为此,我编写了一个 shell 脚本,其中包含以下两个导出语句:

export ORACLE_HOME=/home/user1/instantclient_12_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

并将此 .sh 文件保存到 /etc/profile.d/ 文件夹中。

当我再次使用 PuTTY 登录服务器时,回显语句说环境变量在那里:

# echo $ORACLE_HOME
/home/user1/instantclient_12_1
# echo $LD_LIBRARY_PATH
:/home/user1/instantclient_12_1

但是当我 运行 一些带有 cx_oracle 的 python 代码时,我得到一个错误:

ImportError: libclntsh.so.12.1: cannot open shared object file: No such file or directory

当我重新输入环境变量的导出命令时,代码再次出现 运行s。在我这样做之后,使用 cx_oracle 运行 的代码很好。

为什么环境变量在我执行 echo 命令时出现,却不能正常工作?以及如何让环境变量正确保留?

我阅读的指南说使用 /etc/profile.d/ 中的 shell 脚本来完成,因为最好不要直接编辑 /etc/profile

更新:

我尝试将两条导出行添加到 /etc/profile,但是当我回显时我仍然遇到同样的问题,环境变量在那里,但是当我尝试使用 [=64= 时仍然遇到这个错误] 在 python:

ImportError: libclntsh.so.12.1: cannot open shared object file: No such file or directory

我是否遗漏了一些有关定义环境变量的关键信息?

第二次更新: 我尝试使用 shell 脚本初始化环境,我计划使用调用 cx_Oracle:

的代码 运行

StartServer.sh 的内容:

export ORACLE_HOME=/home/user1/instantclient_12_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
python3 ./UDPDBQuery.pyc

然后我尝试 运行 后台代码:

bash StartServer.sh &

但我还是运行 和以前一样的错误,好像我没有输入环境变量。它只有在我自己导出变量,然后再次 运行 代码时才有效。当我注销时,代码还会在后台停止 运行ning。我仍然很困惑为什么它不起作用。

环境变量是否不能被 cx_oracle 使用,除非我为它们手动执行导出语句?

好吧,我发现两个环境变量之一没有正确导出 /etc/profile.d 中的 .sh 文件,而 $LD_LIBRARY_PATH 会给我 No such file or directorytclient_12_1,但 $ORACLE_HOME 会给我 /home/user1/instantclient_12_1/: is a directory

我解决这个问题的方法是在 profile.d.

中将导出语句拆分为两个单独的 shell 脚本

现在一切正常。