Kompilieren von Python-Code in eine einzige Exe

Ich habe versucht, Python-Code zu einem einzigen Exe zu kompilieren, und ich habe es nicht richtig gemacht.

  1. Ich habe pyinstaller versucht, und das ist die .spec-Datei:

    # -*- mode: python -*- a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'programs\\toolbox.py'], pathex=['C:\\Users\\Ronaldo\\Desktop\\Python\\pyinstaller']) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name=os.path.join('dist', 'program.exe'), debug=False, strip=False, upx=True, console=False ) 

    Pyinstaller kompiliert gut, erstellt eine einzelne exe-Datei, die funktionierte, aber anscheinend andere Benutzer, die nicht die gleiche Version von python installiert (2.7.2) konnte es nicht ausführen. Gibt keinen Fehler, es wird einfach nicht gestartet. Ich habe es versucht, indem ich es an ein paar Freunde schicke und auch auf einer virtuellen Maschine versucht habe.

  2. Versuchte py2exe. Wenn es darum geht, zu kompilieren (mit allen Bibliotheken daneben und dem Rest der Dateien) funktioniert es gut. Ich habe versucht, es zu einer einzigen Datei zu kompilieren, aber die kompilierte Exe-Datei gab mir eine "Toolbox.exe hat aufgehört zu arbeiten" Fehler. Hier ist der Fehlerbericht, nur für den Fall, könnte nützlich sein:

     Problem signature: Problem Event Name: APPCRASH Application Name: toolbox.exe Application Version: 0.0.0.0 Application Timestamp: 49180193 Fault Module Name: StackHash_0a9e Fault Module Version: 0.0.0.0 Fault Module Timestamp: 00000000 Exception Code: c0000005 Exception Offset: 01b61fcb OS Version: 6.1.7601.2.1.0.256.1 Locale ID: 1033 Additional Information 1: 0a9e Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 Additional Information 3: 0a9e Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

    Die Datei setup.py lautet:

     from distutils.core import setup import py2exe, sys, os sys.argv.append('py2exe') setup( options = {'py2exe': {'bundle_files': 1}}, windows = [{'script': "toolbox.py"}], zipfile = None, ) single.py file: 

    Und hier ist die Single.py:

     import os, sys, ctypes ctypes.windll.user32.MessageBoxA(0, "curdir: %s\nexedir: %s\nsys.winver: %s" % ( os.path.abspath(os.curdir), os.path.abspath(os.path.dirname(sys.argv[0])), sys.winver, ), "%s - Message" % os.path.basename(sys.executable), 0x30 ) 

Das Programm, das ich geschrieben habe, verwendet tkinter, sys, random und win32clipboard (pywin) Module. Was mache ich falsch? Gibt es noch andere, bessere Compiler?

Update: Bei Joëls Tipp habe ich mit Debugging und mit Konsolenmodus kompiliert. Immer noch nicht für Benutzer arbeiten, die keine Python 2.7 haben. Dies ist die Fehlermeldung:

 C:\Users\XXXXX\Desktop>program.exe Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe Extracting binaries Setting up to run child Setting magic environment var Creating child process Waiting for child process to finish... Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe workpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/ manifestpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/program.exe.manifest Activation context created Activation context activated C:\Users\XXXXX\AppData\Local\Temp\_MEI14042\python27.dll Manipulating evironment PYTHONPATH=C:/Users/XXXXX/AppData/Local/Temp/_MEI14042;C:/Users/XXXXX/Desktop importing modules from CArchive extracted iu extracted struct extracted archive Installing import hooks outPYZ1.pyz 

Ich hoffe wirklich, dass dies als Hilfe für die mögliche Antwort dient.

One Solution collect form web for “Kompilieren von Python-Code in eine einzige Exe”

Meine zwei Cent: PyInstaller du einen Test mit der debug Option von PyInstaller ?

Aktualisieren Sie einfach Ihre Spezifikation:

 exe = EXE( pyz, [...] debug=True, [...]) 

(Hinweis: Um zahlreiche Meldungsfelder zu vermeiden, können Sie die Konsolenausgabe einstellen: console=True )

Vielleicht würde es einige nützliche Daten zurückgeben. Bitte geben Sie uns in diesem Fall Ausgabe (falls vorhanden).


Entsprechend der Ausgabe, die du bekommst, ist das ein recht häufiges Problem, denn wenn PyInstaller Abhängigkeiten für deine Module auflöst, können Abhängigkeiten von Abhängigkeiten vergessen werden.

In deinem Fall fehlt Tcl , und das wird von einer Tkinter Bibliothek benötigt: Du solltest einen Blick hier werfen: Python, Pyinstaller, der Verknüpfungen in Fenstern erzeugt

Nach Dokumentation:

Ausarbeiten auf Makespec.py, dies ist die unterstützte Befehlszeile: python Makespec.py [opts] […] Wo erlaubt OPTIONEN sind:

[…]

-K, –tk enthalten TCL / TK in der Bereitstellung.

Sie können versuchen, mit diesem Argument, und überprüfen Sie die Auswirkungen auf Ihre spec Datei. Ich wette, es ist eine Ergänzung in den Modulen, die bei der Analyse oder in der EXE-Funktion berücksichtigt wurden.

  • Wie generiere ich alle möglichen Strings in Python?
  • So prüfen Sie, ob eine bestimmte Ganzzahl in einer Liste steht
  • Tornado POST 405: Methode nicht erlaubt
  • Verwenden Sie mehrere Cursor in einer verschachtelten Schleife in sqlite3 von python-2.7
  • CherryPy startet nicht
  • Benachrichtigung über den Schlüsselablauf in redis python
  • Python - Wenn nicht Aussage mit 0.0
  • Probleme mit subprocess.call () in Python 2.7.2 unter Windows
  • Warum ist Python, der einen halben Raum erzeugt, wenn er aus einem String oder einer Liste druckt?
  • So erstellen Sie HTTP-Anforderungsdaten mit {single key: multi values} [duplicate]
  • Kann keine Pakete mit python-pip installieren ("[Errno 20] Not a directory")
  • Python ist die beste Programmiersprache der Welt.