无法导入模块
我想学习Python,因为它看起来不错,而且我想用GTK来开发。之前我有Java和C#的编程经验,处理错误的时候并不太麻烦。不过,我在使用Python的py2exe时遇到了一些问题,不太明白怎么调试这个问题。从我了解的情况来看,这可能是设置上的错误,跟版本类型和文件位置有关,而不是代码本身的问题。
我现在使用的环境是:
- Windows 7 64位
- Python版本 2.7.2 - 32位
- pygtk-all-in-one-2.24.0.win32-py2.7
- py2exe-0.6.9.win32-py2.7
所有的链接可以在 http://pastebin.com/MNGPQVMP 查看。因为StackOverflow只允许我发布两个链接,但我有很多信息要分享!
我的问题是,Python可以正常执行我的基本代码,但在使用py2exe时却出现了错误。
为了产生这个错误,我运行了:
python setup.py py2exe
列表中包含了两个Python文件、exe错误日志和控制台输出:
- PyApp.py > 查看主链接
- setup.py > 查看主链接
- PyApp.exe.log > 查看主链接
- 运行py2exe的控制台输出 > 查看主链接
为了提供更多信息,我还运行了:
python -m py2exe.mf -d PyApp.py
python -m py2exe.mf -d setup.py
这两个命令的输出如下:
- python -m py2exe.mf -d PyApp.py > 查看主链接
- python -m py2exe.mf -d setup.py > 查看主链接
根据exe错误日志和控制台输出,我了解到它无法导入gio(这是不是glib的一部分?)。而额外的模块列表显示了其他错误。
PyApp.py中的gio错误指向了\Python27\lib\site-packages\gtk-2.0\glib\_init_.py 这个文件包含了:
enter from glib._glib import *
_PyGLib_API = _glib._PyGLib_API
del _glib here
所以看起来可能缺少了一些东西。不过我不太确定。
那么我该如何修复这个导入错误呢?
另外,作为附带说明,Dependency Walker也表示缺少两个Windows的dll文件。http://localhostr.com/files/Gf1mXT3/Dependency_Walker..png 我有这些DLL,但它们是64位的,而不是32位的。如果我把它们放到目录里,Dependency Walker就会提示64位的错误,但目前这显然不是问题所在。
这似乎是一个常见的问题,但我似乎无法根据我掌握的信息找到解决办法。
1 个回答
这个问题很简单就能解决!在你的setup.py文件里,应该有一行类似这样的内容:
options = {
'py2exe': {
'packages':'encodings',
'includes': '<module names>',
}
},
要修复这个错误,只需要在'includes'的列表中添加“gio”,像这样:
options = {
'py2exe': {
'packages':'encodings',
'includes': 'gio',
}
},
我有一个用pyGTK构建的程序,所以我需要导入一些模块。为了让你参考,我的代码看起来是这样的:
options = {
'py2exe': {
'packages':'encodings',
'includes': 'cairo, pango, pangocairo, atk, gobject, gio, subprocess',
}
},