【发布时间】:2015-09-09 15:04:38
【问题描述】:
这是我上一个问题的延续:cx_Oracle does not recognize location of Oracle software installation for installation on Linux。
在我能够正确安装 cx_oracle 之后,我想设置我的环境,以便不必每次都导出环境变量。
为此,我编写了一个包含这两个导出语句的 shellscript:
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
只有当我重新输入环境变量的导出命令时,代码才会再次运行。在我这样做之后,使用 cx_oracle 的代码运行良好。
为什么环境变量在我执行 echo 命令时显示出来却不能正常工作?以及如何让环境变量正确持久化?
我阅读的指南说要在 /etc/profile.d/ 中使用 shell 脚本,因为最好不要直接编辑 /etc/profile。
更新:
我尝试将两个导出行添加到/etc/profile,但是当我回显时,我仍然遇到环境变量存在的相同问题,但是尝试在 python 中使用 cx_oracle 时仍然遇到此错误:
ImportError: libclntsh.so.12.1: cannot open shared object file: No such file or directory
我是否遗漏了一些关于定义环境变量的关键内容?
第二次更新: 我尝试使用我计划使用调用 cx_Oracle 的代码运行的 shell 脚本来初始化环境:
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 &
但是我还是遇到了和以前一样的错误,好像我没有放入环境变量一样。仅当我自己导出变量,然后再次运行代码时,它才有效。当我注销时,代码也停止在后台运行。我仍然很困惑为什么它不起作用。
除非我手动为它们执行导出语句,否则 cx_oracle 是否无法使用环境变量?
【问题讨论】:
标签: python linux environment-variables cx-oracle