2017-07-19 11 views
0

zu kompilieren Ich habe eine grafische Benutzeroberfläche (mit Tkinter) in Python erstellt und das führt Python-Dateien auf einen Klick von einem GUI mit os.system ('python_file.py') . Ich wollte alle diese Python-Dateien in eine einzige .exe-Datei mit pyinstaller bündeln, indem ich die Tkinter-Datei als Hauptdatei behalte.Wie mehrere Python-Dateien in einzelne .exe-Datei mit pyinstaller

habe ich die EXE-Datei die folgende in der Befehlszeile, indem Sie:

pyinstaller --debug --onefile --noupx tkinter_app.py

Derzeit meine .spec-Datei wie folgt aussieht:

Ich bin mir nicht sicher, wie Sie die anderen Python-Dateien in die obige .spec-Datei einfügen, damit die gesamte Anwendung funktioniert. Kann mir bitte jemand helfen?

+0

können Sie diese Schritte durchführen: https: //stackoverflow.com/a/37140662/5114581 –

Antwort

0

Der beste Weg ist, um das Array zu verwenden Daten

Zum Beispiel wie folgt aus:

a = Analysis(['.\\main.py'], 
      pathex=['.'], 
      binaries=None, 
      datas=[ ('.\\Ressources\\i18n', 'i18n'), 
      ('.\\Ressources\\file1.py', '.')], 
      hiddenimports=[], 
      hookspath=[], 
      runtime_hooks=[], 
      excludes=[], 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher) 

Hinweis: Stellen Sie sicher, dass es in dem richtigen relativen Pfad zu setzen, so wird Ihr Programm in der Lage sein, Zugriff darauf

Edit: Angesichts Ihrer Fehlermeldung ist das Problem nicht in der Verpackung mit PyInstaller, sondern in os.system Befehl.

os.system entspricht ein DOS-Eingabefenster und typping Ihren Befehl python_file.py

Um Ihre Python-Dateien zugreifen können, müssen Sie wissen, zu öffnen:

  • PyInstaller auspacken gepackten Dateien in einem temporären Ordner, auf den Sie in sys._MEIPASS zugreifen können (funktioniert nur von .exe)
  • os.system kann verwendet werden, um Python zu starten, wobei der vollständige Pfad zur Datei wie folgt angegeben wird: os.system("python " + os.path.join(sys._MEIPASS, "python_file.py"))

    Aber Vorsicht, dies funktioniert nur, wenn python auf dem System installiert ist (und in syspath enthalten ist) und von der exe. Wenn Sie direkt Ihre Python-Datei ausführen, wird eine Ausnahme gesendet.

+0

Vielen Dank für Ihre Antwort. Ich bin immer noch nicht in der Lage, die unterstützenden Python-Dateien von der GUI auszuführen, indem ich die vorgeschlagenen Änderungen mache. Ich erhalte einen Fehler wie 'file1.py wird nicht als interner oder externer Befehl, ausführbares Programm oder Batch-Datei erkannt'. SPEC FILE: a = Analyse (['C: \\ Python27 \\ Skripte \\ tkinter_app.py'], pathex = ['.'], Binaries = None, Daten = [('C: \\ Python27 \\ Tools \\ i18n ',' i18n '), (' C: \\ Python27 \\ Skripte \\ Datei1.py ','. '), (' C: \\ Python27 \\ Skripte \\ Datei2.py ', '.'), ('C: \\ Python27 \\ Skripte \\ Datei3.py', '.'), ('C: \\ Python27 \\ Skripte \\ Datei4.py', '.'), \t ('C: \\ Python27 \\ Skripte \\ file5.py', '.'), ..... – sar678

+0

Dies funktioniert perfekt, wenn Python in meinem Computer installiert ist.Wie können wir diese Anwendung auf Computern ausführen, wo Python ist nicht installiert? – sar678

+0

pack dein python_file.py-Skript in eine Funktion (genannt python_file() zum Beispiel) und rufe es aus deinem Hauptskript anstelle von os.system auf – DFE