gpt4 book ai didi

python - PyInstaller + Wand (ImageMagick) - 缺少依赖项

转载 作者:行者123 更新时间:2023-12-01 03:20:06 26 4
gpt4 key购买 nike

在过去的几天里,我一直在尝试弄清楚如何用我拥有的一堆 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(或用于绑定(bind)到 ImageMagick 库的任何内容) )并且我不确定如何继续正确构建无依赖应用程序。

一如既往,我脑海中浮现的第一个问题是:我是否在这里遗漏了一些明显的东西?
如果没有,您有什么建议?
谢谢

最佳答案

这更多的是评论,而不是真正的答案,但我建议以下......

MAGICK_HOME

设置 MAGICK_HOME 环境变量是明智的做法。 但是我建议使用os.path来解析系统绝对路径;而不是相对。

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

非常小,但有帮助。

.dll 等

请记住,IM 是它自己的生态系统。确实,wand 只需要 MagickWandMagickCore 库即可运行,但 IM 需要所有委托(delegate)/编码器才能发挥作用。确保一切都存在,并仔细检查 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 的攻击。

关于python - PyInstaller + Wand (ImageMagick) - 缺少依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42004835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com