2016-01-11 5 views
2

J'essaie de créer un programme d'installation avec pynsist pour mon application python, qui utilise PyQt4. Je veux regrouper l'installation de python, par conséquent, je dois utiliser python 3.5, car pynsist supporte le bundling uniquement pour python 3.5. J'ai utilisé une nouvelle installation de WinPython 3.5.1.1 où j'ai installé tous les paquets nécessaires et testé le programme d'installation dans une boîte virtuelle Windows 10 fraîchement installée. Pour construire le programme d'installation, j'utilise l'environnement WinPython 3.5.1.1 sur mon ordinateur Windows 7.Regroupement d'une application PyQt4 avec pynsist

Mais quand je commence l'application installée, je reçois une erreur lorsque QtGui ou QtCore est importé:

ImportError: DLL load failed: The specified module could not be found. 

La plupart des problèmes avec cette erreur j'ai trouvé dans Internet sont causées par python ne pas être en mesure de trouver la dll, mais le fichier QtGui4.dll est présent dans le dossier pkgs \ PyQt4 et aussi en le copiant dans le dossier principal de l'application ou le dossier python ne change rien.

J'ai également essayé d'exporter l'exemple d'application PyQt4 dans le référentiel pynsist avec bundling et python 3.5.1 comme exemple minimal, mais j'ai la même erreur.

Utilisation du marcheur de dépendance dans l'environnement Windows 10 sur QtCore.pyd Rendement: enter image description here Il y a beaucoup plus dépendances « API-MS-WIN * .DLL » manquant, je viens de la partie défile où il sertis à être le plus "intéressant".

+0

Vous pouvez être en mesure d'utiliser [marcheur de dépendance] (http://www.dependencywalker.com/) pour trouver ce que les DLL sont manquantes, bien que le site semble être en panne pour le moment. Je vais essayer de construire l'exemple PyQt4 avec Python 3.5 à un certain point aujourd'hui et voir si cela fonctionne. –

+0

J'ai réussi à construire l'exemple PyQt avec Python 3.5.1, en utilisant PyQt extrait d'une roue sur le site de Christoph Gohlke. Vous pouvez tester [l'installateur] (https://www.dropbox.com/s/iem1wix8z2u6b9l/List_App_%28PyQt%29_1.0.exe?dl=0) (qui pourrait probablement être fait un peu plus petit et plus rapide en éliminant les parasites des dossiers). Cela a fonctionné pour moi sur mon installation de Windows 8. Je soupçonne que la copie de PyQt de WinPython pourrait dépendre de certains fichiers installés ailleurs dans l'environnement, alors que la roue semble être autonome. –

+0

Merci pour votre effort. Je suis fatigué d'utiliser votre installateur et j'ai la même erreur. Pour afficher l'erreur, j'utilise un fichier bat qui démarre le script avec une fenêtre de console et une commande 'pause'. Avez-vous eu une fenêtre qui est ouverte ou juste une console qui se ferme instantanément? Peut-être que cela ne fonctionne tout simplement pas avec Windows 10. – Randrian

Répondre

1

Le fichier dll manquant est msvcp140.dll.

Ce fichier peut être inclus dans l'installation en mettant ce fichier dans le répertoire pynsist_pkgs à côté du fichier .cfg.

Pour le charger à l'exécution, le pkgs doit être ajouté au chemin. Cela peut être fait en utilisant un fichier contenant extra_preamble:

os.environ['PATH'] = pkgdir + os.pathsep + os.environ.get('PATH', '') 
+0

C'est ennuyeux - il ne devrait pas être nécessaire de faire ces étapes supplémentaires.Après un peu de bidouillage, je le vois maintenant sur Windows 8 aussi; le problème était masqué par quelque chose d'autre que j'avais installé. –

+0

J'ai [ouvert un problème] (https://github.com/takluyver/pynsist/issues/58) pour essayer de résoudre ce qui est nécessaire. En attendant, je pense que vous pouvez supprimer le besoin de extra_preamble en mettant 'msvcp140.dll' dans le dossier' PyQt4' - je pense que les DLL sont automatiquement trouvées dans le dossier où la DLL les charge. –

+0

Il s'avère que c'est ce que vous devez faire, même si j'avais raison de dire que le placer dans le dossier PyQt4 supprime le besoin de extra_preamble. J'ai ajouté une note à l'exemple [PyQt4] (https://github.com/takluyver/pynsist/tree/master/examples/pyqt) README. –