簡體   English   中英

PyInstaller +魔杖(ImageMagick)-缺少依賴項

[英]PyInstaller + Wand (ImageMagick) - missing dependencies

在過去的兩天中,我一直試圖找出如何從我擁有的Python3.4腳本中構建無Dep的應用程序。 其中包括導入wand ,這要求在計算機上安裝ImageMagick
到目前為止,從源代碼運行的應用程序在我的開發環境(Debian8 / Win10)上都能正常工作,找到了Wand模塊正常運行所需的所有依賴項。

當我嘗試使用PyInstaller打包應用程序時,會出現麻煩。
構建過程按預期方式工作,獲取ImageMagick資源( .dll等),並將其與其他二進制文件一起包含在輸出目錄中,但是當我在未安裝IM庫的計算機上運行應用程序時,導入將失敗。

因此,我深入研究了Wand源代碼,意識到在全局系統路徑(即C:\\ ProgramFiles)中尋找依賴項。 作為一種解決方法,在我的代碼中,我只是用'./'覆蓋了os.environ['MAGICK_HOME']變量,以指示模塊獲取適當的依賴項。 它一直有效到一定程度。

現在,我可以啟動該應用程序:導入不會失敗,繪制GUI且功能不受影響。 直到我至少觸發任何涉及魔杖的動作,因為每當我這樣做時,應用程序崩潰都會引發以下異常:

wand.exceptions.ConfigureError: RegistryKeyLookupFailed `CoderModulesPath' @ error/module.c/GetMagickModulePath/666

顯然,在整個系統范圍內缺乏適當的安裝會導致注冊表調用中斷(現在在win上進行測試),但是不幸的是,我對CTypes(或用於綁定到ImageMagick庫的任何東西)不太熟悉我不確定如何繼續正確構建無延遲應用程序。

與往常一樣,我想到的第一個問題是:我在這里遺漏了明顯的東西嗎?
如果沒有,您的建議是什么?
謝謝

這更多是評論,而不是真正的答案,但是我建議以下...

MAGICK_HOME

設置MAGICK_HOME環境變量是明智的。 但是我建議使用os.path來解析系統的絕對路徑; 相對的。

os.environ['MAGICK_HOME'] = os.path.abspath('.')

很小,但有幫助。

.dll的等

請記住,即時消息是它自己的生態系統。 這是真的, wand只需要MagickWandMagickCore庫運行,但IM所需要的一切代表/編碼器是有用的。 確保所有內容都存在,然后再次檢查QuickStart.txt

在您的構建系統上,可能值得檢查identify實用程序以查看在PyInstallers捆綁包階段應包括的其他路徑。

identify -list Configure | grep PATH

在Mac上,我收到以下信息...

CODER_PATH     /usr/local/lib/ImageMagick-6.9.5/modules-Q16/coders
CONFIGURE_PATH /usr/local/etc/ImageMagick-6/
DOCUMENTATION_PATH /usr/local/share/doc/ImageMagick-6
EXECUTABLE_PATH /usr/local/bin
FILTER_PATH    /usr/local/lib/ImageMagick-6.9.5/modules-Q16/filters
INCLUDE_PATH   /usr/local/include/ImageMagick-6
LIBRARY_PATH   /usr/local/lib/ImageMagick-6.9.5
SHARE_PATH     /usr/local/share/ImageMagick-6
SHAREARCH_PATH /usr/local/lib/ImageMagick-6.9.5/config-Q16

CONFIGURE_PATH下的policy.xml文件非常適合包含以確保您的應用程序免受ImageTragick的攻擊

暫無
暫無

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

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