2010-08-28 17 views
1

J'ai développé une application qui utilise wxPython comme librairie GUI, et py2exe pour que je puisse facilement la distribuer, mais je viens de tester py2exe et l'erreur suivante apparaît lorsque l'exécutable est lancé.wxPython et py2app, erreur CreateActCtx 0x00000008 (Pas assez d'espace disque disponible)

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 

La fonction provoque l'erreur dans src/helpers.cpp est

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; 
} 

Et enfin mon code pour 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'], 
     } 
    } 
) 

Edit: Oui, la deuxième erreur semble provenir torsadé mais je doute que cela provoque la première erreur. Edit2: Hmm peut-être que le premier est juste un avertissement.

+0

Avez-vous capable d'essayer la solution que j'ai donnée ci-dessous. – pyfunc

Répondre

0

se sont avérés # 1 était juste un avertissement et # 2 a été fixé avec un module explicite comprennent

2

Cela signifie que les commandes communes ne sont pas chargées. La deuxième erreur peut être le résultat de la première erreur non fatale et le programme continue de s'exécuter.

essayez d'abord:

(Ne liez pas en option) et vérifier si le problème apparaît toujours. Cela devrait normalement fonctionner.

bundle_files = 3 

essayer suivante:

Depuis, vous utilisez l'option bundle 1, Pouvez-vous vérifier que DLL runtime MSVC est situé dans le répertoire dist le long du côté l'exécutable. Je suggère que vous trouverez également toutes MSVCRXX.dll sur votre machine et voir s'il y a des problèmes de version

+0

J'ai dû inclure explicitement la classe de ressources et cela l'a fait démarrer normalement. Maintenant, tout ce que je dois faire est de comprendre pourquoi l'application semble fonctionner sur win98. L'incorporation manifeste se bloque en quelque sorte même avec les DLL en place. –

+0

Est-ce que vous incluez des dll crt aussi. Voir http://msdn.microsoft.com/en-us/library/ms235291.aspx – pyfunc

+0

J'ai eu le même avertissement à propos de CreateActCtx mais uniquement lorsque "Exe Kind" est défini sur "console" dans GUI2Exe. Si compilé en tant que "windows", cet avertissement disparaît même avec bundle_files = 1. – otterb