[英]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
只需要MagickWand
& MagickCore
庫運行,但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.