web-dev-qa-db-fra.com

Windows- Pyinstaller Error "n'a pas pu exécuter le script" lors du clic sur l'application

J'ai de la difficulté à surmonter cette erreur, j'ai cherché partout ce message d'erreur et rien ne semble pertinent pour ma situation:

"failed to execute script new-app" 

new-app est mon programme d'interface graphique python. Quand j'exécute pyinstaller en utilisant cette commande:

pyinstaller.exe --onedir --hidden-import FileDialog --windowed --noupx new-app.py

Cela fonctionne bien. De plus, lorsque j'exécute la ligne de commande pour exécuter le programme gui, cela fonctionne parfaitement et l'interface graphique est générée à l'aide de cette commande:

.\dist\new-app\new-app.exe

Mais quand je vais dans ce fichier, j'espère pouvoir cliquer sur l'application pour obtenir l'interface graphique, cela me donne l'erreur mentionnée ci-dessus. Pourquoi donc?

J'utilise python2.7 et le système d'exploitation est Windows 7 Enterprise.

Toutes les contributions seront appréciées et merci beaucoup à l'avance.

16
aBiologist

Eh bien, je suppose que j'ai trouvé la solution à ma propre question, voici comment je l'ai fait:

Même si j’étais capable d’exécuter le programme avec une commande python normale, d’exécuter pyinstaller et d’exécuter l’application "new_app.exe" à l’aide de la ligne de commande mentionnée dans la question qui, dans les deux cas, affiche la GUI sans problème du tout. Cependant, ce n'est que lorsque je clique sur l'application que cela ne permet pas d'afficher l'interface graphique et aucune erreur n'est générée. 

Donc, ce que j’ai fait, j’ai ajouté un paramètre supplémentaire --debug dans la commande pyinstaller et en supprimant le paramètre --windowed afin que je puisse voir ce qui se passe réellement lorsque l’application est cliquée et que j’ai découvert qu’une erreur s’était produite. Beaucoup de sens quand je le trace, il se plaint fondamentalement que "some_image.jpg" pas un tel fichier ou répertoire .

La raison pour laquelle il se plaint et ne se plaint pas lorsque j'ai exécuté le script à partir du début ou même à l'aide de la ligne de commande "./" est parce que l'image du fichier existait dans le même chemin que le script situé, mais que pyinstaller avait créé "dist" répertoire qui contient le produit de l’application, il est parfaitement logique que le fichier image n’y soit pas et je l’ai donc déplacé dans un répertoire dist où se trouve l’application cliquable!

19
aBiologist

Ajoutez cette fonction au début de votre script:

import sys, os 
    def resource_path(relative_path):
        if hasattr(sys, '_MEIPASS'):
            return os.path.join(sys._MEIPASS, relative_path)
        return os.path.join(os.path.abspath("."), relative_path)

Reportez-vous à vos fichiers de données en appelant la fonction resource_path(), comme ceci:

resource_path('myimage.gif')

Ensuite, utilisez cette commande:

pyinstaller --onefile --windowed --add-data todo.ico;. script.py

Pour plus d'informations, visitez cette page de documentation .

3
FREE LEARNING

Au cas où quelqu'un n'obtiendrait pas de résultat des autres réponses, j'ai résolu un problème similaire en:

  1. ajout d'indicateurs --hidden-import au besoin pour tous les modules manquants

  2. nettoyage des dossiers et des fichiers de spécifications associés:

rmdir /s /q dist

rmdir /s /q build

del /s /q my_service.spec

  1. Exécuter les commandes pour l'installation en tant qu'administrateur
0
JacobIRR

J'ai eu la même erreur et j'ai découvert que j'avais écrit mon script en utilisant Anaconda, mais pyinstaller essaie de le compresser en python pur. Ainsi, les modules n'existant pas dans le dossier de la bibliothèque pythons sont à l'origine de ce problème. 

0
Fatih1923