GTK 应用程序的 py2exe 版本无法读取 png 文件

发布于 2024-08-06 10:01:14 字数 608 浏览 6 评论 0原文

我正在制作我的应用程序的 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 包含什么吗?

I'm working on making a py2exe version of my app. Py2exe fails at copying some
modules in. My original app loads .png files fine, but the exe version does not:

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

Any idea what I should force py2exe to include?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

星星的轨迹 2024-08-13 10:01:14

这是 PILpy2exe

PIL(python 图像库)动态导入其插件,而 py2exe 无法识别,因此它不包含 .exe 文件中的插件。

解决方法(希望如此!)是在您的 .py 文件之一中显式导入驱动程序,

import Image
import PngImagePlugin
Image._initialized=2

这意味着 py2exe 肯定会包含该插件。 Image._initialized 位停止 PIL 扫描更多插件。

这里是 py2exe wiki 中的文档,详细解释了这一点

This is a known problem with PIL and py2exe

PIL (python image library) imports its plugins dynamically which py2exe doesn't pick up on, so it doesn't include the plugins in the .exe file.

The fix (hopefully!) is to import the drivers explicitly like this in one of your .py files

import Image
import PngImagePlugin
Image._initialized=2

That will mean that py2exe will definitely include the plugin. The Image._initialized bit stops PIL scanning for more plugins.

Here are the docs from the py2exe wiki explaining this in full

少女情怀诗 2024-08-13 10:01:14

这是什么平台?
最近我认为他们改进了 windows 上的 png 支持,
所以你使用的 pygtk 版本也是相关的。
http://aruiz.typepad.com/siliconisland/2008/ 02/再见-zlib-li.html

What platform is this?
Lately I think they improved the png support on windows,
so the version of pygtk you're using is pertinent also.
http://aruiz.typepad.com/siliconisland/2008/02/goodbye-zlib-li.html

泪痕残 2024-08-13 10:01:14

确保在安装应用程序时捆绑加载程序。 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) 你会发现
目录:共享等,lib。你会
需要将所有这些复制到
运行py2exe后的dist目录。

保留版权。

Make sure you bundle the loaders when you install your application. Py2exe won't know about these, but they are a needed part of GTK, and live where the rest of the GTK "data" files live.

From http://unpythonic.blogspot.com/2007/07/pygtk-py2exe-and-inno-setup-for-single.html

It is not sufficient to just make
py2exe pull in the GTK DLLs for
packaging (which it does pretty
successfully). GTK also requires a
number of data files which include
themes, translations etc. These will
need to be manually copied into the
dist directory so that the application
can find them when being run.

If you look inside your GTK runtime
directory (usually something like
c:\GTK) you will find the
directories: share, etc, lib. You will
need to copy all of these into the
dist directory after running py2exe.

Copyright retained.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文