wxPython与py2app,CreateActCtx错误 0x00000008(可用磁盘空间不足)
我正在开发一个应用程序,使用wxPython作为图形界面库,并且用py2exe来方便地分发它。不过,我刚刚测试了py2exe,结果在启动可执行文件时出现了以下错误。
12:13:08: Debug: src/helpers.cpp(140): 'CreateActCtx' failed with error 0x00000008 (Not enough disk space available.).
Traceback (most recent call last):
File "eYoutubeMacros3.py", line 1, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "application\application.pyo", line 5, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "application\backend\backend.pyo", line 4, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "application\backend\extractor.pyo", line 5, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "twisted\web\client.pyo", line 17, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "twisted\web\error.pyo", line 188, in <module>
ImportError: cannot import name resource
导致错误的函数在src/helpers.cpp文件中是
static ULONG_PTR wxPySetActivationContext()
{
OSVERSIONINFO info;
wxZeroMemory(info);
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&info);
if (info.dwMajorVersion < 5)
return 0;
ULONG_PTR cookie = 0;
HANDLE h;
ACTCTX actctx;
TCHAR modulename[MAX_PATH];
GetModuleFileName(wxGetInstance(), modulename, MAX_PATH);
wxZeroMemory(actctx);
actctx.cbSize = sizeof(actctx);
actctx.lpSource = modulename;
actctx.lpResourceName = MAKEINTRESOURCE(2);
actctx.hModule = wxGetInstance();
actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID;
h = CreateActCtx(&actctx);
if (h == INVALID_HANDLE_VALUE) {
wxLogLastError(wxT("CreateActCtx"));
return 0;
}
if (! ActivateActCtx(h, &cookie))
wxLogLastError(wxT("ActivateActCtx"));
return cookie;
}
最后,这是我用来设置py2exe的代码
setup(
console = [self.target], # Contains some build info, is this is relevant I'll add it
zipfile = 'library.dat',
options = {
'py2exe' : {
'bundle_files' : 1,
'dll_excludes' : ['w9xpopen.exe'],
'optimize' : 2,
'dist_dir' : '../dist/executables/',
'compressed' : True,
#'excludes' : ['doctest', 'pdb', 'unittest', 'difflib', 'inspect'],
}
}
)
补充:是的,第二个错误似乎是来自twisted,但我怀疑这会导致第一个错误。
补充2:嗯,也许第一个只是个警告。
2 个回答
2
这意味着一些常用的控件没有加载。第二个错误可能是由于第一个错误引起的,但第一个错误并不致命,程序仍然可以继续运行。
首先尝试:
(不要使用打包选项)看看问题是否还会出现。通常这样做应该能解决问题。
bundle_files = 3
接下来尝试:
因为你使用的是打包选项1,能不能检查一下在可执行文件旁边的dist目录里,哪个MSVC运行时DLL文件存在。我建议你还要在你的电脑上找到所有的MSVCRXX.dll,看看是否有版本上的问题。
0
结果发现,第一个只是个警告,而第二个问题通过明确地包含模块解决了。