Windows-Pyinstaller-fout “Kan script niet uitvoeren” wanneer de app klikte

Ik heb het moeilijk om deze fout te overwinnen, ik heb overal naar die foutmelding gezocht en niets lijkt relevant voor mijn situatie:

"failed to execute script new-app" 

Nieuw-app is mijn Python GUI-programma. Wanneer ik Pyinstaller voer met behulp van deze opdracht:

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

Het werkt wel soepel. Wanneer ik bovendien de opdrachtregel uitvoert om het GUI-programma uit te voeren, werkt het perfect en wordt de GUI gegenereerd met behulp van deze opdracht:

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

Maar wanneer ik naar dat bestand ga, hopelijk in staat is om op de app te klikken om de GUI te krijgen, geeft het me de hierboven genoemde fout. Waarom is dat?

Ik gebruik Python2.7 en het OS is Windows 7 Enterprise.

Alle ingangen worden gewaardeerd en heel veel van tevoren bedankt.


Antwoord 1, Autoriteit 100%

Nou, ik denk dat ik de oplossing voor mijn eigen vraag heb gevonden, hier is hoe ik het deed:

Hoewel ik in staat was om het programma met succes te laten lopen met behulp van het normale python-commando en met succes Pyinstaller uitloopt en de app “new_app.exe” kan uitvoeren met behulp van de opdrachtregel die in de vraag in beide gevallen wordt vermeld die in beide gevallen de GUI vermeld, Helemaal geen probleem. Alleen als ik op de toepassing klik, kan het niet toestaan ​​om de GUI weer te geven en er geen fout wordt gegenereerd.

Dus wat ik deed, is dat ik een extra parameter –debug in de opdracht pyinstaller heb toegevoegd en de parameter –windowed heb verwijderd, zodat ik kan zien wat er werkelijk gebeurt wanneer op de app wordt geklikt en ik ontdekte dat er een fout was opgetreden wat heel logisch was toen ik het traceerde, het klaagde in feite dat “some_image.jpg” niet zo’n bestand of map.

De reden waarom het klaagt en niet klaagde toen ik het script vanaf de eerste plaats uitvoerde of zelfs de opdrachtregel “./” gebruikte, is omdat de bestandsafbeelding in hetzelfde pad bestond als het script dat zich bevond, maar toen pyinstaller werd gemaakt map “dist” die het app-product bevat, het is volkomen logisch dat het afbeeldingsbestand er niet is en dus heb ik het in feite naar die dist-map verplaatst waar de klikbare app zich daar bevindt!


Antwoord 2, autoriteit 12%

In mijn geval heb ik een main.py die afhankelijkheden heeft met andere bestanden. Nadat ik die app heb gebouwd met py installer met behulp van deze opdracht:

pyinstaller --onefile --windowed main.py

Ik heb de main.exe in de dist-map. Ik dubbelklikte op dit bestand en ik heb de hierboven genoemde fout gegenereerd.
Om dit op te lossen, kopieer ik gewoon de main.exe van de dist-map naar de vorige map, de hoofdmap van mijn main.py en de afhankelijkheidsbestanden, en ik kreeg geen foutmelding na het uitvoeren van de main.exe.


Antwoord 3, autoriteit 11%

Voeg deze functie toe aan het begin van uw 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)

Verwijs naar uw gegevensbestanden door de functie resource_path()aan te roepen, als volgt:

resource_path('myimage.gif')

Gebruik dan dit commando:

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

Ga voor meer informatie naar deze documentatiepagina.


Antwoord 4, autoriteit 7%

Als iemand geen resultaten krijgt van de andere antwoorden, heb ik een soortgelijk probleem opgelost door:

  1. het toevoegen van --hidden-importvlaggen indien nodig voor ontbrekende modules

  2. de bijbehorende mappen en spec-bestanden opschonen:

rmdir /s /q dist

rmdir /s /q build

del /s /q my_service.spec

  1. De opdrachten voor installatie uitvoeren als beheerder

Antwoord 5, autoriteit 6%

Ik kreeg deze foutmelding om een andere reden dan de redenen die hier worden vermeld, en kon de oplossing niet gemakkelijk vinden, dus ik dacht ik post het hier.

Hopelijk is dit nuttig voor iemand.

Mijn probleem was met het verwijzen naar bestanden in het programma. Het kon het vermelde bestand niet vinden, want toen ik het codeerde, had ik het bestand waarnaar ik wilde verwijzen in de map op het hoogste niveau en belde ik gewoon

"my_file.png"

toen ik de bestanden aan het bellen was.

pyinstaller vond dit niet leuk, want zelfs toen ik het vanuit dezelfde map uitvoerde, verwachtte het een volledig pad:

"C:\Files\my_file.png"

Toen ik al mijn paden had gewijzigd in de volledige versie van hun pad, werd dit probleem opgelost.


Antwoord 6, autoriteit 5%

Ik kreeg dezelfde fout en kwam erachter dat ik mijn script heb geschreven met Anaconda, maar pyinstallerprobeert het script op pure python in te pakken. Dus modules die niet in de bibliotheekmap van Python voorkomen, veroorzaken dit probleem.


Antwoord 7

Die fout is te wijten aan het ontbreken van modules in pyinstaller. U kunt de ontbrekende modules vinden door het script in de uitvoerbare opdrachtregel uit te voeren, d.w.z. door ‘-w’ uit de opdracht te verwijderen. Nadat u het uitvoerbare bestand van de opdrachtregel hebt gemaakt, worden op de opdrachtregel de ontbrekende modules weergegeven. Door die ontbrekende modules te vinden, kunt u dit aan uw opdracht toevoegen:
” –hidden-import = missingmodule “

Ik heb mijn probleem hiermee opgelost.


Antwoord 8

Ik had een soortgelijk probleem, dit was te wijten aan het feit dat ik anaconda gebruik en de afhankelijkheden niet in pip maar in anaconda installeer. Wat me hielp was om de afhankelijkheden in pip te installeren.


Antwoord 9

Ik heb een soortgelijk probleem gevonden, maar geen van de bovenstaande antwoorden heeft geholpen. Ik heb een oplossing gevonden voor mijn probleem met het activeren van de basisomgeving. Toen ik nog een keer probeerde wat ik deed zonder basis, kreeg ik mijn GUI.exeuitgevoerd.

Zoals aangegeven door @Shyrtle, aangezien ik, toen ik mijn eerste probleem had opgelost, een achtergrondafbeelding wilde toevoegen, moest ik het hele pad van de afbeelding doorgeven, zelfs als de file.pyen de afbeelding zelf stonden in dezelfde map.


Antwoord 10

In mijn geval (level noob) vergat ik de bibliotheek “matplotlib” te installeren. Programma werkte in Pycharm, maar niet toen ik probeerde te openen vanuit terminal. Nadat de bibliotheek in de hoofdmap was geïnstalleerd, was alles in orde.

Other episodes