2009-07-17 4 views
6

Je vais avouer que je suis très nouveau à Python et je ne sais pas encore ce que je fais. Récemment, j'ai créé une très petite application Windows en utilisant Python 2.6.2 et wxPython 2.8. Et ça fonctionne très bien; Je suis assez satisfait de la façon dont cela fonctionne normalement. Par normalement je veux dire quand j'invoque directement par l'interpréteur Python, comme ceci:py2exe: Compilé Python Windows L'application ne fonctionnera pas à cause de DLL

> python myapp.py 

Cependant, je voulais aller plus loin et de compiler ce fait dans un fichier exécutable autonome. J'ai donc suivi these instructions depuis le wiki wxPython qui utilise py2exe. Au début, il m'a donné des erreurs dans la ligne de commande, en disant que MSVCR90.dll était manquant. Ensuite, j'ai copié MSVCR90.dll dans mon dossier Python \ DLLs. Cela a d'abord semblé le fixer, car il a fait ce qu'il devait faire. Il a fini avec un avertissement rapide qu'il y avait quelques fichiers DLL dont dépend le programme et que je pourrais ou non avoir besoin de les distribuer. J'ai donc navigué dans le dossier dist créé par py2exe et essayé d'exécuter mon exécutable. Mais en essayant de l'ouvrir seulement sauté vers le haut d'une boîte de dialogue d'erreur dit:

This application failed to start because MSVCR90.dll was not found. 
Re-installing the application may fix this problem. 

Alors je suis allé de l'avant et recopiés msvcr90.dll dans ce dossier dist. Mais cela n'a pas fait l'affaire. Ensuite, je l'ai copié dans le répertoire WINDOWS \ system32. Cela ne l'a pas fait non plus. Que dois-je faire pour que cette chose fonctionne?

+1

Ceci est un doublon d'une autre question avec une discussion plus complète:
Un jour, StackOverflow pourrait me faire assez confiance pour en faire un doublon. – resplin

Répondre

8

Vous ne pouvez pas simplement copier msvcr * .dll - ils doivent être configurés en utilisant les règles pour les assemblages côte à côte. Vous pouvez le faire en installant le paquet redistribuable comme le signale Sam, ou vous pouvez les mettre à côté de vos exécutables aussi longtemps que vous respectez les règles.

Voir la section « Déploiement Visual C++ DLLs bibliothèque que les assemblées privées » ici: How to Deploy using XCopy pour plus de détails, mais essentiellement votre application ressemble à ceci:

c:\My App\MyApp.exe 
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest 
c:\My App\Microsoft.VC90.CRT\msvcr90.dll 

L'un des avantages est que les utilisateurs non-administrateurs peuvent utiliser votre application (je crois que vous devez être un administrateur pour installer le moteur d'exécution via le programme d'installation redistribuable). Et aucun programme d'installation n'est nécessaire - vous pouvez simplement copier les fichiers sur un PC et tout fonctionne.

+0

Est-ce une fonctionnalité de Vista? J'ai rencontré un problème similaire (MSVCP71.DLL signalé manquant lors du lancement d'une application py2exe) et juste le mettre dans le même répertoire que le fichier .exe l'a corrigé (au moins sur XP) –

+1

@Luper: Je crois que les nouvelles règles sont entrées avec msvcr80 . – RichieHindle

Questions connexes