2010-09-23 10 views
17

Lorsque vous essayez d'utiliser py2exe pour convertir un simple jeu de Python j'ai fait au format exe, il m'a donné l'erreur suivante:py2exe: charge DLL n'a

Traceback (most recent call last): 
    File "C:\Users\Tali\Desktop\2exe.py", line 4, in <module> 
    setup(console=['test.py']) 
    File "C:\Python\lib\distutils\core.py", line 152, in setup 
    dist.run_commands() 
    File "C:\Python\lib\distutils\dist.py", line 953, in run_commands 
    self.run_command(cmd) 
    File "C:\Python\lib\distutils\dist.py", line 972, in run_command 
    cmd_obj.run() 
    File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 243, in run 
    self._run() 
    File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 305, in _run 
    dlls = self.find_dlls(extensions) 
    File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 389, in find_dlls 

    self.dll_excludes) 
    File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 1021, in find_dep 
endend_dlls 
    import py2exe_util 
ImportError: DLL load failed: %1 is not a valid Win32 application. 

Je cherchai le web pendant environ une heure, essayé de changer choses dans mon programme. Rien ne fonctionne. Bien que mon programme utilise la bibliothèque "random", je n'ai pas vu un cas dans lequel il a causé ce genre de problème.

Le script d'installation:

from distutils.core import setup 
import py2exe 

setup(console=['test.py']) 

Oui, les deux scripts sont dans le même dossier (Desktop). Si c'est important, je cours sous Windows Vista avec Python 2.7

Merci beaucoup à l'avance.

+0

Pouvez-vous vérifier, si vous n'avez pas un problème d'incompatibilité 64 bits/32 bits. – pyfunc

+1

J'ai un Vista 32 bits, et je ne sais pas comment je suis censé vérifier une telle incompatibilité. – Niv

+0

Essayez d'exécuter le dépendant des dépendances sur l'exécutable résultant pour voir si vous avez besoin d'envoyer des dépendances supplémentaires ... – ChristopheD

Répondre

0

De vos commentaires, je vois que vous faites cela dans l'invite de commande:

setup.py py2exe 

du third step de py2exe tutorial, vous devriez faire cela au lieu (dans la commande PROMT):

python setup.py py2exe 

Un deuxième regard sur les commentaires sur la question initiale montre que cette suggestion a déjà été faite. +1 à joaquin pour cela.

Pour essayer de répondre à votre question à nouveau: Joaquin a également mentionné que cela pourrait être un problème de chemin. Plutôt que d'essayer de résoudre ce problème, vous pouvez envisager l'option la plus simple de copier vos fichiers python dans C: \ Python. Puis, dans l'invite de commande:

cd C:\Python 
python setup.py py2exe 

Cela a toujours travaillé pour moi

Hope this helps

+0

Cela a déjà été indiqué dans les commentaires. L'op n'est pas capable d'obtenir juste 'python' produisant le shell python. – joaquin

+0

Je pense que c'est une mauvaise idée de copier les fichiers source Python dans le répertoire d'installation de Python. Au lieu de cela, vous devez exécuter le fichier EXE Python souhaité explicitement, par exemple "c: \ python \ python setup.py py2exe". Ou vous devriez changer drive/directory dans c: \ python (cd/d c: \ python) et ensuite lancer "python d: \ somefolder \ setup.py py2exe". – jarmod

0

Vous pouvez traiter py2exe et les maux de tête, j'ai essayé de faire cela, même si je l'avais droit , ce serait une erreur, même si j'ai trouvé l'excellent programme python gui2exe, cela rend extrêmement facile de faire un exe (ou l'un des autres formats supportés).

Gui2exe: http://code.google.com/p/gui2exe/downloads/detail?name=GUI2Exe_0.5.0.zip

Exemples: http://code.google.com/p/gui2exe/wiki/GUI2ExeExamples

+0

Et cela fonctionne aussi pour les scripts non-GUI? – Niv

+1

@niv ya ça, c'est juste un gentil gui qui semble résoudre certains problèmes magiquement et qui le rend aussi plus facile (ok peut-être pas magique mais mes problèmes de dll sont partis après l'avoir utilisé) – Zimm3r

+0

Je l'ai fait et ça donne exactement la même stacktrace . C'est juste une interface pour le même logiciel non fonctionnel. – korona

2

Essayez d'installer Microsoft Visual C++ 2008 Redistributable Package (x86): http://www.microsoft.com/downloads/en/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en

+0

Ceci l'a effectivement arrangé pour moi. J'ai eu un problème avec la compilation de 32 bits Python py2exe sur une machine 64 bits, avec python-mysql installé. J'ai l'erreur DLL. Mais le téléchargement de l'exécution x86 Visual C++ 2008 et la réparation de ma version installée ont fonctionné. – user1479931

33

J'ai eu exactement le même problème.

Depuis que j'ai Windows 7 64bit, j'ai téléchargé py2exe-0.6.9.win64-py2.6.amd64.exe, que je suppose être la version 64 bits de py2exe. mais ça n'a pas marché et j'ai eu la même erreur.

J'ai changé pour py2exe-0.6.9.win32-py2.6.exe, et cela a fonctionné correctement.

Je suppose que vous devez faire correspondre le 32 bits ou 64 bits avec l'installation de Python au lieu de Windows lui-même. Au fait, "setup.py py2exe" ou "python setup.py py2exe" n'a pas d'importance, si vous avez demandé à Windows d'ouvrir *.py avec python pendant l'installation de python.

+0

Vous pouvez certainement rencontrer des problèmes si vous supposez que "setup.py" est identique à "python setup.py". Il n'est pas rare d'avoir plus d'une installation Python sur la même machine (v2.x et peut-être les deux variantes 32 bits et 64 bits de v3.x). Si vous basculez entre les différentes versions de Python en utilisant un script CMD qui définit les variables d'environnement PATH et PYTHONHOME alors "python setup.py" sera exécuté quel que soit python.exe est premier dans votre PATH mais en cours d'exécution "setup.py" sera exécuté quelle que soit la version de Python vous avez installé le dernier car il est associé à l'extension PY. Donc sois prudent. – jarmod

3

J'ai rencontré le même problème et j'ai cherché et je suis venu ici. J'ai essayé le chemin rapide par xiao-yu mais je n'ai pas travaillé. Donc, j'ai trouvé cela à partir de http://www.py2exe.org/index.cgi/Tutorial#Step52: 5.2.1. Regroupement de la DLL d'exécution C

Si vous disposez des droits de redistribution de MSVCR90.dll, vous devriez en avoir une copie dans votre installation de Visual Studio, sous VC \ redist \ x86 \ Microsoft.VC90.CRT. Depuis Visual Studio 2008, vous ne pouvez pas simplement copier ce fichier DLL - vous avez également besoin du fichier manifeste que vous y trouverez. Le fichier redist.txt indique que vous devez distribuer les trois DLL et le fichier manifeste non modifié et que la violation du contrat de licence ne permet pas de distribuer l'une des dll sans les autres (bien que py2exe n'ait besoin que de MSVCR90.dll). à partir du fichier redist.txt est la suivante: -----------------------

alors, essayez-le.

3

Il semblerait que le problème puisse être résolu en téléchargeant l'installateur py2exe correct pour votre plate-forme et votre version.

J'ai eu le même problème ici aussi. Je fonctionnais sous Windows 7 64 bits et j'avais installé Python 2.7. Mon problème a été lié au fait que j'ai installé py2exe-0.6.9.win32-py2.7.exe et que le programme d'installation n'a pas pu trouver python, même s'il a trouvé le dossier d'installation. Courir python setup.py py2exe à ce stade m'a donné exactement les mêmes erreurs que vous voyez.

J'ai ensuite téléchargé py2exe-0.6.9.win64-py2.7.amd64.exe de this page et l'ai installé. L'installation s'est déroulée sans accroc et python setup.py py2exe m'a donné beaucoup de sortie console, a créé les dossiers build et dist et l'exécutable attendu.

0

je faisais face au même problème, j'utilisais Python 2.7 (32 bits) sur Windows 7 (64 bits) avec py2exe-0.6.9.win64-py2.7.amd64.exe , donc le problème était que j'utilisais 32 bits Python et 64 bits py2exe. Si vous ne savez pas si le paquet Python que vous utilisez est 32 bits ou 64 bits, alors lancez idle.bat de C:\Python27\Lib\idlelib\.

La première ligne dans l'invite de la fenêtre python vous montrera les détails du paquet python.

J'ai désinstallé le py2exe-0.6.9.win64-py2.7.exe en exécutant "pip uninstall py2exe" et installé py2exe-0.6.9.win64-py2.7.amd64.exe qui a fonctionné pour moi.