公司的项目是要连接数据库的,使用的Python框架Flask开发,之前一直都是连接的MySQL数据库,一直也没有在意,今天接到消息需要连接Oracle,测试时就出现了错误,显示找不到有关的.so文件,如下:
也就是说Python在执行Oracle相关的文件时,需要依赖于Oracle带的.so文件,如果找不到,就会报错。这个问题搞了一中午才解决,犯了一个低级错误,但很容易让人忽略,故记录如下:
那么,按照思路一步一步地查找原因:
1. 是否安装Oracle服务器。
注意,这里安装的是Oracle的服务器端,并不是客户端。我安装的是11gR版本。所以不是这个原因。
2. 环境变量是否配置,且是否配置成功。
配置环境变量最好在root和相关用户下都配置一下,防止遗漏。
以 root 身份进入 /home目录,这下面是一些root创建的用户,如下:
这里的oracle用户是Oracle数据库安装时创建的用户,我们所用到的一些 .so 文件就在其中,我的 .so 文件所在目录为:
/home/oracle/product/11gR2/lib
algoface用户是我的Python项目所在的地方,那么配置环境变量时,就要把oracle目录下的相关目录配置到algoface用户下的 .bash_profile 文件中。(最好也在root的.bash_profile下配一下,防止不起作用)
配置方法如下:
以 algoface 用户进入algoface的主目录,打开 .bash_profile 文件,加入一下环境变量(这个路径根据具体的目录进行设置,这是我的路径):
过程:
编辑文件:
执行 .bash_profile,这里一定要执行,否则环境变量不会起作用,就像Windows配完环境变量要重启一样。
至此,环境变量配置成功,可以使用命令 echo $LD_LIBRARY_PATH 来查看是否有相关路径输出出来,判断环境变量是否配置成功。
3. 用户权限是否够用
这一步就是我找了好久的问题,配置完环境变量以为就可以了,却还是报原来的错误,最后在自己手动进行 ln -s 进行软链接时才发现原来是用户的权限不够。在上面可以看到Python文件的执行用户和Oracle用户不是同一个,所以,权限问题是阻碍连接的主要问题。
使用oracle用户进行相关的lib目录,执行 ll -d 查看权限,发现同组和其他用户都是没有权限的(因为这里我修改过,所以会有权限,刚开始时是没有的),因此附上权限即可,如下:
至此,问题解决,进入Python命令行,测试成功,不报错:
虽然最后是因为一个小问题导致时间有些浪费,但权限问题在Linux中至关重要,因此记录一下。
本人经验,仅供参考!