【问题标题】:Missing dll's when using Py2Exe, PyGtk, and Glade使用 Py2Exe、PyGtk 和 Glade 时缺少 dll
【发布时间】:2011-03-22 21:54:45
【问题描述】:

我正在尝试使用 Py2Exe 构建我的第一个应用程序,并按照http://www.py2exe.org/index.cgi/Py2exeAndPyGTK 中列出的说明进行操作,但我正在使用 Glade 创建 UI。 (它只是一个带有关闭按钮和标签的极简 gui。)

当我尝试运行生成的 exe 时,我收到一个错误对话框,要求我检查包含以下错误消息的日志文件:

Traceback (most recent call last):
  File "pygtkpy2exetest.py", line 8, in <module>
  File "gtk\glade.pyc", line 12, in <module>
  File "gtk\glade.pyc", line 10, in __load
ImportError: DLL load failed: The specified module could not be found.

所以我开始挖掘了一下,我注意到的第一件事是 py2exe 似乎无法找到 glib 模块:

The following modules appear to be missing
['gdk', 'unix', 'glib.GError', 'glib.IOChannel', 'glib.IO_ERR', 'glib.IO_FLAG_APPEND', 'glib.IO_FLAG_GET_MASK', 'glib.IO_FLAG_IS_READABLE', 'glib.IO_FLAG_IS_SEEKABLE', 'glib.IO_FLAG_IS_WRITEABLE', 'glib.IO_FLAG_MASK', 'glib.IO_FLAG_NONBLOCK', 'glib.IO_FLAG_SET_MASK', 'glib.IO_HUP', 'glib.IO_IN', 'glib.IO_NVAL', 'glib.IO_OUT', 'glib.IO_PRI', 'glib.IO_STATUS_AGAIN', 'glib.IO_STATUS_EOF', 'glib.IO_STATUS_ERROR', 'glib.IO_STATUS_NORMAL', 'glib.Idle', 'glib.MainContext', 'glib.MainLoop', 'glib.OPTION_ERROR', 'glib.OPTION_ERROR_BAD_VALUE', 'glib.OPTION_ERROR_FAILED', 'glib.OPTION_ERROR_UNKNOWN_OPTION', 'glib.OPTION_FLAG_FILENAME', 'glib.OPTION_FLAG_HIDDEN', 'glib.OPTION_FLAG_IN_MAIN', 'glib.OPTION_FLAG_NOALIAS', 'glib.OPTION_FLAG_NO_ARG', 'glib.OPTION_FLAG_OPTIONAL_ARG', 'glib.OPTION_FLAG_REVERSE', 'glib.OPTION_REMAINING', 'glib.OptionContext', 'glib.OptionGroup', 'glib.PRIORITY_DEFAULT', 'glib.PRIORITY_DEFAULT_IDLE', 'glib.PRIORITY_HIGH', 'glib.PRIORITY_HIGH_IDLE', 'glib.PRIORITY_LOW', 'glib.Pid', 'glib.PollFD', 'glib.SPAWN_CHILD_INHERITS_STDIN', 'glib.SPAWN_DO_NOT_REAP_CHILD', 'glib.SPAWN_FILE_AND_ARGV_ZERO', 'glib.SPAWN_LEAVE_DESCRIPTORS_OPEN', 'glib.SPAWN_SEARCH_PATH', 'glib.SPAWN_STDERR_TO_DEV_NULL', 'glib.SPAWN_STDOUT_TO_DEV_NULL', 'glib.Source', 'glib.Timeout', 'glib.child_watch_add', 'glib.filename_display_basename', 'glib.filename_display_name', 'glib.filename_from_utf8', 'glib.get_application_name', 'glib.get_current_time', 'glib.get_prgname', 'glib.glib_version', 'glib.idle_add', 'glib.io_add_watch', 'glib.main_context_default', 'glib.main_depth', 'glib.markup_escape_text', 'glib.set_application_name', 'glib.set_prgname', 'glib.source_remove', 'glib.spawn_async', 'glib.timeout_add', 'glib.timeout_add_seconds', 'glib.uri_list_extract_uris']

如果我尝试手动将 glib 模块添加到 setyp.py 中的“包含”选项,它没有任何效果。

进一步挖掘,我用 Dependency Walker 打开了生成的 exe,它显示缺少两个 dll,MPR.DLL 和 SHLWAPI.DLL,但它们都在我的 system32 文件夹中。

如果我只是在没有 glade 的情况下创建 UI,那么我没有任何问题,但是鉴于我已经使用 glade 创建了另一个应用程序,如果可能的话,我想坚持使用 glade。关于从这里去哪里有什么建议吗?我在 Windows XP 上使用 Python 2.7、Py2Exe 0.6.9、PyGtk 2.22.6。

谢谢, 布伦特

【问题讨论】:

    标签: python pygtk py2exe glade


    【解决方案1】:

    我也遇到了同样的问题,但是在谷歌上花了几个小时后,我设法找到了解决方案。

    1. 使用dependencywalker 并分析你的xxx.exe 你可以从http://www.dependencywalker.com/下载
    2. 找出错误文件(就我而言,它们是 MSJAVA.DLL 和 libxml2-2.dll)
    3. 搜索你的电脑目录并将它们复制到'dist'文件夹中。您也可以从其他网站下载缺少的 DLL。
    4. 再次运行dependencywalker,您将看到错误减少或不再出现。
    5. xxx.exe 现在可以执行了。

    我希望以上内容可以帮助那些面临此类问题的人。

    Neoh !!!分享是关心!!!

    【讨论】:

    • +1 表示libxml2-2.dll;将它添加到 dist 文件夹对我有用。奇怪的是,没有MSJAVA.DLL,它运行良好。
    • +1 用于依赖遍历器,但对我来说,不是将 dll 添加到 dist 文件夹,而是将树中出现错误的那个的父 dll 添加到选项的 dll_excludes在 setup.py 中使应用程序工作(我添加了“MSWSOCK.dll”、“MSHTML.dll”和“DNSAPI.dll”)
    【解决方案2】:

    这可能无济于事,但我遇到了同样的问题,结果证明是 gtk 安装问题。这导致 py2exe 生成的 gtk._gtk.pyd 文件出现问题。

    我使用的 setup.py 与 py2exe 在http://www.py2exe.org/index.cgi/Py2exeAndPyGTK 上建议的几乎相同

    【讨论】:

      【解决方案3】:

      我有一次同样的错误并修复它。当您运行setup.py py2exe 时,您的文件将在win32 中创建。 pyoglade.pyo,当你相信 win64 .pyc 时,至少这是我的经验,它运行了我的 app in window7-64 的 py2exe,然后给了我错误,但是当你在 @ 上创建可执行文件时987654327@我做了,我认为glade.pyo,然后给了我同样的错误,去我的项目并做任何事情

      gtk.Builder()

      `不要使用更多

      gtk.glade.XML("file.glade")

      并删除我的 .py 文件的导入 gtk.glade 和我的 setup.py 只需使用

      导入 gtk

      一切都很完美。 希望我的经历对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多