“WindowsError: [Fout 2] Het systeem kan het opgegeven bestand niet vinden” lost niet op

Ik heb een exe-bestand gemaakt van mijn python-project door py2exe die een aantal bestanden heeft.
wanneer ik dit exe-bestand in mijn systeem uitvoer. het werkt prima, maar als ik het in een ander systeem plaats, wordt het aanmeldingsformulier geopend en daarna gaat het niet naar het volgende venster dat ik in het 2e python-bestand heb geschreven. het geeft me onderstaande fout in het logbestand.

Traceback (most recent call last):
      File "login.py", line 246, in DataReader
      File "subprocess.pyo", line 711, in __init__
      File "subprocess.pyo", line 948, in _execute_child
    WindowsError: [Error 2] The system cannot find the file specified

Ik weet dat het een dubbele vraag is, maar ik heb veel oplossingen voor stackoverflow geprobeerd, maar ik heb dit probleem niet opgelost. Iemand helpt me om dit probleem op te lossen.

En na succesvol inloggen zal het met deze code naar het start.py-bestand gaan, maar het gaat niet en geeft bovenstaande fout.

   subprocess.call(["python", "./start.py"])

Bij voorbaat dank


Antwoord 1, autoriteit 100%

Er zijn hier minstens twee problemen.


Ten eerste kun je pythonniet zomaar als het uitvoerbare bestand gebruiken.

Op je systeem heb je pythonop de %PATH%, en het is de juistePython-versie, met alle modules u bent afhankelijk van, enz. Maar u kunt daar niet op vertrouwen voor al uw gebruikers. Als je dat zou kunnen, zou je in de eerste plaats geen moeite doen met py2exe.

En natuurlijk, op de andere machine waarop je test, staat er helemaal niets met de naam pythonop de %PATH%, dus je krijgt een WindowsError 2.

Je wilt in ieder geval werken met de dezelfdePython die je script gebruikt.


Ondertussen is er geen reden om te verwachten dat start.pyzich in de huidige werkmap bevindt. Het bevindt zich (hopelijk) in dezelfde map als het bovenliggende script, maar dat zal niet de werkmap zijn. Gewoonlijk start een Windows-programma op met iets als C:\ of de WINNT-directory of de homedirectory van de gebruiker, en dit verschilt van versie tot versie.

Natuurlijk gebruik je tijdens de ontwikkeling de opdrachtprompt, met de directory van het script als je werkdirectory wanneer je het script uitvoert, of je gebruikt een IDE die in feite hetzelfde doet. Het werkt dus toevallig. Maar als je het uitvoert vanuit de .exe, kun je daar niet op rekenen.

(Deze zal nog leuker zijn om te debuggen. Het subproces zal succesvol starten en onmiddellijk eindigen, zonder iets zichtbaars te doen. Je bovenliggende script zal geen idee hebben dat er iets mis is gegaan, omdat je de afsluitcode niet controleert of de stderr, wat het debuggen erg leuk maakt. Je zou eigenlijk check_callmoeten gebruiken, niet call.)

Hoe dan ook, als je wilt dat je script een ander script vindt dat zich in dezelfde map als zichzelf bevindt, moet je dit expliciet zeggen.


Dus om beide problemen op te lossen:

import os
import sys
mypath = os.path.abspath(__file__)
mydir = os.path.dirname(mypath)
start = os.path.join(mydir, "start.py")
subprocess.call([sys.executable, start])

Nog een laatste ding: van uw opmerkingen, ik weet niet eens zeker of u daadwerkelijk bedraagt start.pyin uw uitkeerbare pakket. Op je machine, waar het werkt, is het blijkbaar in C:\Python27\start.py. Maar op de machine die je test op … & nbsp; bestaat het ergens? Zo niet, dan kan u het natuurlijk niet uitvoeren.

Hulpmiddelen zoals py2exekan automatisch afhankelijkheden vinden die u import, maar als u gewoon een script uitvoert in een andere tolkinstantie via subprocess, je zult het moeten vertellen (in je setup.py) om dat script op te nemen.

Other episodes