7
votes

Comment puis-je déboguer une application PY2EXE 'Échec de l'initialisation d'une erreur correctement'?

Je suis très nouveau à Python en général, mais j'ai fait une application à Python 2.6 / Wxpython 2.8 qui fonctionne parfaitement lorsque je l'exécute à travers Python. Mais je voulais aller plus loin et être capable de le déployer comme exécutable Windows, alors j'ai essayé de sortir py2exe. Mais je n'ai pas pu le faire fonctionner. Cela compilerait toujours un EXE, mais lorsque j'essaie d'essayer de courir qu'il aboie un message d'erreur cryptique. Au début, ils étaient des messages simples qui disent que cela ne pouvait pas trouver certaines dlls, mais même après avoir donné toutes les dlls qu'il voulait, il renvoie maintenant ceci: xxx

alors j'ai brisé les choses et je viens de faire Une application très très simple utilise Wxpython juste pour voir si cela fonctionnerait, ou si certaines des caractéristiques les plus complexes de mon application originale entraient dans la voie. Mais même mon test simple a renvoyé la même erreur. Voici le code pour le script de test simple: xxx

et voici le script de configuration PY2EXE que j'ai utilisé: xxx

) < / p>

alors i exécute python setup.py py2exe , il génère le fichier EXE, avertit de certains fichiers DLL (que j'ai ensuite copié dans le répertoire DIST), mais quand j'essaie de Exécutez l'EXE, je reçois l'erreur que j'ai citée ci-dessus immédiatement.


2 commentaires

-1: Titre de la question terrible. Cela devrait peut-être être: "Comment puis-je déboguer une application PY2EXE" Échec d'initialisation d'une erreur correctement "erreur?"


Désolé pour le titre, s.lott. C'est maintenant changé.


4 Réponses :


0
votes

J'ai déjà utilisé py2exe et je ne traverse jamais une situation comme celle-ci ...

Cependant, cela ressemble à des dépendances manquantes sont votre problème .....

Le programme emballé travaille-t-il sur votre machine mais pas sur les autres?

Si tel est le cas, exécutez l'application emballée dans Dépend (Walker de dépendance) sur les deux machines et comparez-la à discerner que les packages n'ont pas été inclus.

bonne chance


4 commentaires

Par "programme emballé" Voulez-vous dire l'EXE généré? Ou il suffit d'exécuter le script directement à travers python? Quoi qu'il en soit, si j'exécute python testme.py de la ligne de commande, cela fonctionne bien. Mais le point de gérer cela via Py2exe est que je veux pouvoir le déployer aux ordinateurs que ne a installé Python. Mais en ce moment, cela ne fonctionne pas sur tout ordinateur , python ou non, quand je le compile avec py2exe.


Programme emballé = EXE généré. L'EXE doit fonctionner correctement sur la machine qui la produisait. Exécutez-le sur cette machine avec Walker de dépendance pour voir la liste explicite des bibliothèques chargées. Puis faites demi-tour et faites-le sur une machine qui échoue. La différence vous indiquera une solution.


C'était mon point tout au long ... Le programme emballé ne fonctionne pas bien sur la machine qui l'a produite. D'où le titre.


La question n'était pas entièrement claire pour moi. Pourtant, vous pouvez utiliser dépend de l'application pour voir ce qui n'a pas été chargé avec succès.



0
votes

Vous n'êtes pas censé copier tous les .dlls qu'il se plaint! Certains d'entre eux sont des fichiers système Windows et sont présents dans les bons endroits du système. Si vous les copiez dans le dossier DIST, les choses ne fonctionneront pas correctement.

En général, vous souhaitez uniquement copier .dlls spécifiques à votre application. Pas le système .dlls. Dans certaines situations, vous devrez peut-être expédier un vcredist_xx.exe dans votre installateur pour obtenir le temps d'exécution MSVC sur le système. Vous ne devriez jamais essayer d'expédier ces fichiers .dlls "crus" par vous-même. Utilisez le paquet Redist, il vous fera gagner du temps et de la frustration.

Avez-vous essayé de suivre les instructions ici: http://wiki.wxpython.org/smallapp ?


3 commentaires

J'ai essayé ces instructions et voici ce qui s'est passé. 1. Essayé Exécution Python Setup.py py2exe --icon = smallapp.ico , a obtenu cette erreur: Erreur: option --icon non reconnu . 2. Essayé Exécution Python Setup.py Py2exe , obtenez cette erreur: Erreur: Erreur dans setup.cfg: la commande 'py2exe' n'a pas une telle option 'version_legalcopyright' . 3. Supprimé le fichier setup.cfg et essayé ré-exécuté python setup.py py2exe , py2exe est apparu pour fonctionner correctement, il a créé la construction et les répertoires de DISTRY avec des fichiers -Except il n'a pas créé de fichier EXE dans DIST! (autre que juste w9xpopen.exe, qui ne fait rien seul)


4. Modifié le fichier setup.py dans les instructions pour correspondre à celui que j'ai publié ci-dessus dans la question ici (sauf modification des références de Testme à smallapp ), et il compilé Fine, produisit une exe fine, mais l'EXE qu'il a créé a exactement la même erreur: l'application n'a pas réussi à initialiser correctement.


Je ne sais pas si c'était le cas du cas où la réponse a été affichée, mais à l'instant, les DLL redistribuables VC ne sont pas considérées comme des fichiers système et doivent être distribués côte à côte avec des applications qui les utilisent: support.microsoft.com/kb/326922



0
votes

Êtes-vous sûr de donner les mêmes dlls que celui utilisé par WXPython.

Les DLL VC ++ utilisées par WXPYTHON peuvent être téléchargées à partir de la page de téléchargement WXPython. Avez-vous essayé celui-ci?


3 commentaires

Lorsque j'essaie d'exécuter l'EXE sans copier des dlls, je reçois cette erreur: cette application n'a pas pu démarrer car msvcr90.dll n'a pas été trouvé. Réinstaller l'application peut résoudre ce problème. Ensuite, je copie msvcr90.dll vers le dossier DIST et obtenez l'erreur "Application pour initialiser correctement" mentionnée ci-dessus. Afaik, cette DLL provient du paquet VC ++.


Avez-vous également installé le package redistribuable Visual C ++?


Oui, je l'ai fait - en particulier j'ai installé le Paquet 2008 avant même de poster cette question.



10
votes

Notez qu'il existe une version ultérieure du package redistribuable Visual C ++ 2008: SP1 . Cependant, le SP1 et la version antérieure n'installent pas les DLL dans le chemin. Comme la page de téléchargement dit (mon accentuation):

Ce paquet installe l'exécution Composants de C Runtime (CRT), Standard C ++, ATL, MFC, OpenMP et Bibliothèques MSDIA. Pour les bibliothèques qui Soutenir le modèle de déploiement côte à côte (CRT, SCL, ATL, MFC, OpenMP) Ils sont installé dans l'assemblage natif cache, également appelé dossier winsxs , sur Versions du système d'exploitation Windows qui soutiennent des assemblages côte à côte.

Vous trouverez probablement ces fichiers dans le dossier % windir% \ winsxs et non sur le chemin.Qu'est-ce que je pense que vous devez faire est d'intégrer les informations manifestes des DLL pertinentes pour les DLL pertinentes (trouvé dans % windir% \ winsxs \ manifests ) dans votre setup.py . je Ajout de la section suivante: xxx

immédiatement après la section existante et reconstruit l'EXE: il a couru sans problèmes. NOTE: Selon la version exacte de la version des fichiers Visual C ++ que vous avez installés, les informations ci-dessus peuvent ne pas être exactement correctes. Regardez les manifestes de votre système et utilisez la version correcte , PublickeyToken etc.

Alternativement, regardez Ce réponse pour déployer les DLL avec votre application (par opposition à la suppression de existent déjà sur le système cible). Oh ... Je vois que vous avez demandé cette question originale; -)


3 commentaires

Ajout que l'a fait! Merci beaucoup!


Au fait, étant donné un fichier DLL, comment trouvez-vous le jeu public-jeu pour cela? Par exemple, je dispose en fait de la version 9.0.30729.1 de la DLL ci-dessus; Comment puis-je continuer à obtenir le bon public entretenu?


Regardez dans le répertoire Manifeste que j'ai mentionné plus tôt pour le manifeste spécifique dont vous avez besoin.