为什么pyinstaller生成的cx_oracle应用程序在新的CentOS机器上工作,而在安装了Oracle客户端的应用程序上却没有?

时间:2016-09-14 04:30:17

标签: python pyinstaller cx-oracle

我编写了一个使用 public MyView(Context context) { super(context); Paint p = new Paint();// Problem is here this is local declaration p = new Paint() // do like this and remove above line p.setColor(Color.GREEN); b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); } 的python应用程序,然后生成一个pyinstaller包(文件夹/单个可执行文件)。我应该注意它是在64位Linux上。我有一个包含Oracle客户端库的自定义规范文件,因此所需的一切都在捆绑中。

当我在新安装的CentOS 7.1 VM上运行捆绑的可执行文件(未安装Oracle软件)时,程序成功连接到数据库并运行且没有错误。但是,当我在另一个包含RHEL 7.2的系统上安装捆绑的可执行文件时,我尝试运行它,我得到了

  

无法获取Oracle环境句柄。

我的理解是,这是由于Oracle客户端安装存在某种冲突。我尝试在机器上取消设置ORACLE_HOME给我错误。它几乎就像程序在我捆绑客户端文件的位置以外的位置查找Oracle客户端库一样。

它似乎应该适用于两台机器或两台机器。我想我不清楚Python应用程序/ cx_Oracle如何找到Oracle客户端库。同样,它似乎在具有全新操作系统安装的机器上发现它们很好。关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:1)

您可能遇到的一件事是,如果您在构建cx_Oracle时使用了即时客户端RPM,则RPATH将被烧录到共享库中。您可以使用chrpath命令检查其内容并进行更改。您可以使用修改后的RPATH中的特殊路径$ ORIGIN来指定相对于共享库的路径。

如果RPATH不是罪魁祸首,那么你将需要检查ldd命令的输出并查看它的位置,然后调整一下以使其自身运行!