Question

J'utilise Python 2.6 sur XP. Je viens d'installer py2exe et je peux créer avec succès un simple fichier hello.exe à partir d'un fichier hello.py. Cependant, lorsque j'essaie d'utiliser py2exe sur mon programme réel, py2exe génère quelques messages d'information mais ne génère aucun élément dans le dossier dist.

Mon fichier setup.py ressemble à ceci:

from distutils.core import setup
import py2exe

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

et la sortie py2exe 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é toutes mes importations (bien que j'ai été un peu surpris de voir win32 mentionné, car je ne l'importe pas explicitement). De plus, mon programme démarre assez facilement avec cette commande:

python ServerManager.py

Clairement, je fais quelque chose de fondamentalement faux, mais en l’absence de tout message d’erreur de py2exe, je ne sais pas quoi.

Était-ce utile?

La solution 2

J'ai découvert que py2exe fonctionne parfaitement si je commente la partie de mon programme qui utilise wxPython. De plus, lorsque j’utilise py2exe sur l’exemple 'simple' fourni avec son téléchargement (par exemple, dans Python26 \ lib \ site-packages \ py2exe \ samples \ simple), le message d’erreur suivant s'affiche:

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

Donc, quelque chose à propos de wxPython fait que py2exe pense que j’ai besoin d’une DLL Visual Studio 2008. Je n'ai pas VS2008, et pourtant mon programme fonctionne parfaitement comme un répertoire de modules Python. J'ai trouvé une copie de MSVCP90.DLL sur le Web, je l'ai installé dans Python26 / DLL et py2exe fonctionne correctement.

Je ne comprends toujours pas d'où vient cette dépendance, car je peux exécuter mon code parfaitement sans py2exe. Il est également contrariant que py2exe ne m’ait pas envoyé de message d’erreur, contrairement à l’exemple test_wx.py.

Mise à jour supplémentaire: Lorsque j'ai essayé d'exécuter la sortie de py2exe sur un autre PC, j'ai découvert qu'il fallait installer MSVCR90.DLL. Par conséquent, si Visual C ++ 2008 n'est pas déjà installé sur votre ordinateur cible, je vous recommande de télécharger et d'installer le fichier Package redistribuable Microsoft Visual C ++ 2008 .

Autres conseils

Je mets cela dans tous mes scripts setup.py:

distutils.core.setup(
    options = {
        "py2exe": {
            "dll_excludes": ["MSVCP90.dll"]
        }
    },
    ...
)

Ceci permet de garder py2exe silencieux, mais vous devez tout de même vous assurer que la dll est sur la machine de l'utilisateur.

wxPython n'a rien à voir avec cela. Avant Python 2.6, Python utilisait Visual Studio 2003 comme compilateur Windows. À compter de la version 2.6, ils sont passés à Visual Studio 2008, qui nécessite parfois un fichier manifeste. Cela a été bien documenté. Voir les liens suivants:

http://wiki.wxpython.org/py2exe

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

De même, si vous créez une application wxPython avec py2exe, vous souhaitez définir le paramètre windows, et NON le paramètre console. Peut-être que mon tutoriel va vous aider:

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

Il semble que cela ne soit qu'une dépendance pour Python 2.6. Je ne recevais pas cette erreur en 2.5, mais après la mise à niveau, je suis.

Ce fil de discussion a quelques informations de base sur la raison de ce problème et sur la façon de le résoudre:
http://www.nabble.com/py2exe, -Py26, -wxPython-and-dll-td20556399.html

Je ne voulais pas avoir à installer le vcrédiste. Mon application ne nécessite actuellement aucune installation et peut être exécutée par des non-administrateurs, ce qui est un comportement que je ne veux pas perdre. J'ai donc suivi les suggestions des liens et obtenu les fichiers Microsoft.VC90.CRT.manifest et msvcr90.dll nécessaires en installant Python "pour cet utilisateur uniquement". J'ai également besoin de msvcp90.dll que j'ai trouvé dans le dossier WinSxS d'un "Tous les utilisateurs". Installation de Python 2.6. Comme j'avais déjà deux des trois, j'ai inclus msvcm90.dll pour éviter de futures erreurs, même si je n'ai pas eu d'erreurs immédiates lorsque je l'ai laissé de côté. Je mets le manifeste et les trois DLL dans le dossier libs utilisé par mon application gelée.

Le truc que je devais exécuter consistait à inclure une copie supplémentaire du manifeste et de msvcr90.dll à la racine du dossier de mon application à côté de l’exécutable généré par py2exe. Cette copie de la DLL est utilisée pour amorcer l’application, mais elle semble alors ne figurer que dans le dossier libs.

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

De plus, j’ai eu le même problème lorsque py2exe enregistrait un vrai message d’erreur. Ensuite, j'ai réalisé que stderr n'était pas redirigé dans mon fichier journal. Ajouter " > build.log 2 > & amp; 1 " sur la ligne de commande où vous appelez py2exe.

import sys

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

Sur chaque Windows, vous pouvez trouver le fichier MSVCP90.dll dans un sous-répertoire de C: \\ WINDOWS \\ WinSxS \\

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

Accédez à C: \\ WINDOWS \\ WinSxS \\ et utilisez la recherche de fichiers Windows pour trouver MSVCP90.dll .

Juste pour votre information, ça a fonctionné pour moi de copier les fichiers

Microsoft.VC90.CRT.manifest msvcr90.dll

dans le répertoire avec le fichier .exe sur la machine de l'utilisateur (qui n'a pas installé de python ou de VC redistribuable).

Merci pour tous les conseils ici!

La sortie indique que vous utilisez WX. Essayez d’exécuter py2exe avec votre script spécifié sous forme d’application graphique plutôt que de console. Si je ne me trompe pas, cela risque de poser des problèmes avec py2exe.

Essayez ceci: http://www.py2exe.org/index.cgi/Tutorial # Étape52

Cela a fonctionné pour moi

Il y a quelques informations sur le wiki wxPython.

Déployer une application Python

py2exe avec wxPython et Python 2.6

Sur mon win8.1, je ne trouve pas le chemin

  

c: / Fichiers de programme / Microsoft Visual Studio 9.0 / VC / Redist / x86 / Microsoft.VC90.CRT

Au contraire, la DLL se trouve dans

  

C: /WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX

Le XXX peut varier en fonction de votre PC

Vous pouvez rechercher dans le chemin, puis ajouter le chemin dans votre fichier setup.py

import sys
sys.path.append('C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX')
import sys

sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top