py2exe打包的GTK应用无法读取png文件
我正在为我的应用程序制作一个py2exe版本。py2exe在复制某些模块时出现了问题。我的原始应用程序可以正常加载.png
文件,但exe版本却无法做到这一点:
Traceback (most recent call last):
File "app.py", line 1, in <module>
from gui.main import run
File "gui\main.pyc", line 14, in <module>
File "gui\controllers.pyc", line 10, in <module>
File "gui\utils\images.pyc", line 78, in <module>
☺
File "gui\utils\images.pyc", line 70, in GTK_get_pixbuf
☺§☺▲☻
File "gui\utils\images.pyc", line 38, in PIL_to_pixbuf
gobject.GError: Image type 'png' is not supported
你知道我应该强制py2exe包含哪些内容吗?
3 个回答
2
在安装你的应用程序时,确保把加载器一起打包。Py2exe 不会知道这些加载器,但它们是 GTK 的必要部分,和其他 GTK 的“数据”文件放在一起。
来源:http://unpythonic.blogspot.com/2007/07/pygtk-py2exe-and-inno-setup-for-single.html
仅仅让 py2exe 把 GTK 的 DLL 文件拉进来打包是不够的(这方面它做得还不错)。GTK 还需要一些数据文件,比如主题、翻译等等。这些文件需要手动复制到 dist 目录里,这样应用程序在运行时才能找到它们。
如果你查看你的 GTK 运行时目录(通常是类似 c:\GTK 的路径),你会发现有几个文件夹:share、etc、lib。你需要在运行 py2exe 后,把这些文件夹都复制到 dist 目录里。
版权保留。
4
PIL(Python图像库)会动态加载它的插件,而py2exe却没有识别到这些插件,所以在生成的.exe文件里没有包含这些插件。
解决这个问题的方法(希望能有效!)是在你的某个.py文件中明确地导入这些驱动,就像这样:
import Image
import PngImagePlugin
Image._initialized=2
这样做的话,py2exe就一定会把插件包含进去。Image._initialized
这一部分会阻止PIL继续扫描更多的插件。
这里是py2exe wiki的文档,详细解释了这个问题。
2
这个平台是什么呢?最近我觉得他们在Windows上改进了对png格式的支持,所以你使用的pygtk版本也很重要。