使用Py2Exe,PyGtk和Glade时缺少dll

时间:2011-03-22 21:54:46

标签: python pygtk py2exe glade

我正在尝试使用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中的“includes”选项,则它没有任何效果。

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

如果我只是创建没有林间空地的UI,我没有遇到任何问题,但鉴于我已经创建了另一个带有林间空地的应用程序,我想尽可能坚持使用林间空地。关于从哪里去的任何建议?我在Windows XP上使用Python 2.7,Py2Exe 0.6.9,PyGtk 2.22.6。

谢谢, 布伦特

3 个答案:

答案 0 :(得分:5)

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

  1. 使用dependencywalker和profiling ur xxx.exe 你可以从http://www.dependencywalker.com/
  2. 下载
  3. 找出错误文件(对于我的情况,它们是MSJAVA.DLL和libxml2-2.dll)
  4. 搜索你的pc目录并将它们复制到'dist'文件夹中。你也可以从其他网站下载丢失的DLL。
  5. 再次运行dependencywalker,你会看到错误减少或不再存在。
  6. xxx.exe现在可以执行。
  7. 我希望上面会帮助那些面临这类问题的人。

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

答案 1 :(得分:1)

这可能没有用,但我有同样的问题&amp;它原来是一个gtk安装问题。这导致py2exe生成的gtk._gtk.pyd文件出现问题。

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

答案 2 :(得分:0)

我有一次同样的错误并修复它。当您运行setup.py py2exe时,您的文件将在win32中创建。 pyoglade.py o,当你这样做时,你相信win64 .pyc,至少那是我所经历的,运行py2exe my app in window7-64,然后给了我错误,但是当我在win32上创建可执行文件时,我认为glade.pyo,然后给了我同样的错误,转到我的项目并且做了

  

<强> gtk.Builder()

`不要使用更多

  

<强> gtk.glade.XML( “file.glade”)

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

  

导入gtk

一切都很完美。 我希望我的经历能为你提供帮助。

相关问题