51 votes

py2exe ne parvient pas à générer un exécutable

Je suis à l'aide de la version 2.6 de python sur XP. Je viens d'installer py2exe, et je peux créer avec succès un simple hello.exe à partir d'un hello.py. Cependant, quand j'ai essayer d'utiliser py2exe sur mon programme, py2exe produit que quelques messages d'information, mais ne parvient pas à générer quoi que ce soit dans le dossier dist.

Mon setup.py ressemble à ceci:

from distutils.core import setup
import py2exe

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

et le py2exe de sortie ressemble à ceci:

python setup.py py2exe
running py2exe
creating C:\DevSource\Scripts\ServerManager\build
creating C:\DevSource\Scripts\ServerManager\build\bdist.win32
   ...
   ...
creating C:\DevSource\Scripts\ServerManager\dist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'lxml.etree' (C:\Python26\lib\site-packages\lxml\etree.pyd -> lxml.etree.pyd)
   ...
   ...
creating python loader for extension 'bz2' (C:\Python26\DLLs\bz2.pyd -> bz2.pyd)
*** finding dlls needed ***

py2exe semble avoir trouvé tous mes importations (même si j'ai été un peu surpris de voir win32 mentionné, comme je ne suis pas explicitement de l'importer). Aussi, mon programme se lance tout à fait heureux avec cette commande:

python ServerManager.py

Clairement, je suis en train de faire quelque chose de fondamentalement mauvais, mais en l'absence de messages d'erreur à partir de py2exe je n'ai aucune idée de ce qu'.

40voto

Charles Anderson Points 3837

J'ai découvert que py2exe fonctionne très bien si je commentaire de la part de mon programme qui utilise wxPython. Aussi, lorsque j'utilise py2exe sur la 'simple' de l'échantillon qui vient avec son téléchargement (c'est à dire dans Python26\Lib\site-packages\py2exe\samples\simples), j'obtiens ce message d'erreur:

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory

Donc, quelque chose à propos de wxPython fait py2exe pense que j'ai besoin d'un Visual Studio 2008 DLL. Je n'ai pas de VS2008, et pourtant mon programme fonctionne parfaitement ainsi que d'un répertoire des modules Python. J'ai trouvé une copie du MSVCP90.DLL sur le web, installé dans Python26/Dll, et py2exe fonctionne maintenant très bien.

Je ne comprends toujours pas où cette dépendance a venir, puisque je peux utiliser mon code tout à fait correct sans py2exe. C'est aussi ennuyeux que py2exe ne me donne pas un message d'erreur comme il l'a fait avec l'test_wx.py de l'échantillon.

Mise à jour: Lorsque j'ai essayé d'exécuter la sortie de py2exe sur un autre PC, j'ai découvert qu'il avait besoin d'MSVCR90.DLL installé; donc si votre PC cible n'a pas obtenu de Visual C++ 2008 déjà installé, je vous recommande de télécharger et d'installer le Microsoft Visual C++ 2008 Redistributable Package.

9voto

Mike Driscoll Points 18662

wxPython n'a rien à faire avec elle. Avant la version 2.6 de Python, Python utilisé Visual Studio 2003 comme compilateur Windows. Début avec la 2.6, ils sont passés à Visual Studio 2008, ce qui nécessite un fichier de manifeste dans certaines situations. Cela a été bien documenté. Voir les liens suivants:

http://wiki.wxpython.org/py2exe

http://py2exe.org/index.cgi/Tutorial#Step52

Aussi, si vous êtes à la création d'un wxPython application avec py2exe, alors vous voulez définir le paramètre windows, PAS de la console. Peut-être que mon tutoriel va vous aider à:

http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/

6voto

resplin Points 271

Il semble que ce n'est qu'une dépendance pour Python 2.6. Je n'étais pas cette erreur est inférieure à 2,5, mais après la mise à jour je suis.

Cet e-mail thread a une toile de fond pour la cause du problème et comment le résoudre:
http://www.nabble.com/py2exe,-Py26,-wxPython-and-dll-td20556399.html

Je ne voulais pas à avoir à installer le vcredist. Mon application ne nécessite aucune installation et peut être exécuté par des non-administrateurs, ce qui est un comportement que je ne veux pas le perdre. J'ai donc suivi les suggestions dans les liens et les Microsoft.VC90.CRT.manifeste et msvcr90.dll par l'installation de Python "pour cet utilisateur". J'ai aussi besoin de msvcp90.dll que j'ai trouvé dans le dossier WinSxS d'une "tous les utilisateurs" Python 2.6 installer. Puisque j'ai déjà eu deux des trois, j'ai inclus msvcm90.dll pour éviter les erreurs futures si je n'ai pas dans l'immédiat, des erreurs lorsque je l'ai laissée. J'ai mis le manifeste et les trois Dll dans le dossier libs utilisées par mon application figée.

L'astuce que j'avais à faire était notamment d'une copie supplémentaire du manifeste et msvcr90.dll dans la racine de mon dossier de l'application prochaine de par py2exe exécutable généré. Cette copie de la DLL est utilisé pour l'amorçage de l'application, mais il semble qu'à se regarder dans le dossier libs.

Espérons que cette découverte contribue à quelqu'un d'autre.

Aussi, j'ai eu le même problème avec py2exe journal d'un véritable message d'erreur. Puis j'ai réalisé que stderr n'étais pas redirigé dans mon fichier de log. Ajouter "> construire.log 2>&1" sur la ligne de commande où vous appelez py2exe.

6voto

Egor Points 41
import sys

sys.path.append('C:\\WINDOWS\\WinSxS\\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2')

Sur chaque fenêtre, vous pouvez trouver le fichier MSVCP90.dll dans certains sous-répertoire C:\\WINDOWS\\WinSxS\\

Dans mon cas, le répertoire est: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.

Aller à l' C:\\WINDOWS\\WinSxS\\ et l'utilisation de fichiers de windows recherche afin de trouver l' MSVCP90.dll.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X