簡體   English   中英

為什么pyinstaller生成的cx_oracle應用程序可以在新的CentOS計算機上運行,​​而不能在安裝了Oracle客戶端的計算機上運行?

[英]Why does pyinstaller generated cx_oracle application work on fresh CentOS machine but not on one with Oracle client installed?

我編寫了一個使用cx_Oracle的python應用程序,然后生成pyinstaller捆綁包(文件夾/單個可執行文件)。 我應該注意它在64位linux上。 我有一個包含Oracle客戶端庫的自定義規范文件,因此捆綁包中包含了所有需要的內容。

當我在新安裝的CentOS 7.1 VM(未安裝Oracle軟件)上運行捆綁的可執行文件時,該程序成功連接到數據庫並且運行無誤。 但是,當我在包含RHEL 7.2的另一個系統上安裝捆綁的可執行文件並嘗試運行它時,我得到了

無法獲取Oracle環境句柄。

我的理解是,這是由於Oracle客戶端安裝存在某種沖突。 我嘗試在計算機上取消設置ORACLE_HOME的錯誤。 程序看起來好像是在我捆綁客戶端文件的位置之外的其他位置尋找Oracle客戶端庫。

似乎它應該在兩台計算機上都可以工作,也不能在兩台計算機上都工作。 我想我不清楚Python應用程序/ cx_Oracle如何找到Oracle客戶端庫。 同樣,似乎在安裝了全新操作系統的計算機上它們也不錯。 為什么會這樣?

您可能會遇到的一件事是,如果在構建cx_Oracle時使用即時客戶端RPM,則會將RPATH刻錄到共享庫中。 您可以檢查其內容並使用chrpath命令對其進行更改。 您可以在修改后的RPATH中使用特殊路徑$ ORIGIN來指定相對於共享庫的路徑。

如果不是RPATH的罪魁禍首,那么您將需要檢查ldd命令的輸出,查看它的查找位置,然后進行調整以使其自身發揮作用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM