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 脚本
现在一切正常。
这是我之前问题的延续:
在能够正确安装 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
.
现在一切正常。