【发布时间】:2017-02-02 14:29:47
【问题描述】:
过去几天我一直在试图弄清楚如何从我拥有的一堆 Python3.4 脚本中构建一个无 dep 的应用程序。其中包括 wand 的导入,这需要在计算机上安装 ImageMagick。
到目前为止一切顺利,从源代码运行的应用程序在我的开发环境(Debian8/Win10)中运行良好,找到了 Wand 模块正常运行所需的所有依赖项。
当我尝试使用 PyInstaller 打包应用程序时出现问题。
构建过程按预期工作,获取 ImageMagick 资源(.dlls 等)并将它们与其他二进制文件一起包含在输出目录中,但是当我在没有安装 IM 库的机器上运行应用程序时,导入失败。
所以我深入研究了 Wand 源代码,并意识到在全局系统路径(即 C:\ProgramFiles)中查找依赖项。作为一种解决方法,在我的代码中,我只是用'./' 覆盖了os.environ['MAGICK_HOME'] 变量,指示模块获取适当的依赖项。在某种程度上,它奏效了。
现在我可以启动应用程序了:导入不会失败,GUI 已绘制并且功能不受影响。至少在我触发任何涉及魔杖的动作之前,因为每当我这样做时,应用程序都会崩溃,引发以下异常:
wand.exceptions.ConfigureError: RegistryKeyLookupFailed `CoderModulesPath' @ error/module.c/GetMagickModulePath/666
似乎很明显,缺乏正确的安装系统范围会导致注册表调用中断(现在在 win 上测试),但不幸的是我不太熟悉 CTypes(或用于绑定到 ImageMagick 库的任何东西) 并且我不确定如何继续正确构建无依赖应用程序。
与往常一样,脑海中浮现的第一个问题是:我是否遗漏了一些明显的东西?
如果没有,您有什么建议?
谢谢
【问题讨论】:
标签: python imagemagick pyinstaller wand