So kompilieren Sie ein Python-Skript in eine ausführbare Binärdatei

118

Ich muss ein Python-Skript in eine ausführbare Windows-Datei konvertieren.

Ich habe Python 2.6 installiert python26.

Ich habe ein Skript erstellt und es beibehalten C:\pythonscript. In diesem Ordner befinden sich zwei Dateien

Setup.pyund oldlogs.py(diese Datei muss verschlüsselt werden)

setup.py Code ist

from distutils.core import setup
import py2exe

setup(console=['oldlogs.py'])

Wie kann ich oldlogs.py in eine exe-Datei konvertieren?

Dewal Tewari
quelle
1
siehe es Tutorial
Ashwini Chaudhary
Der Vollständigkeit halber ist cx_Freeze ein weiteres Tool, das Sie hierfür verwenden können (zusammen mit PyInstaller und py2exe, die bereits in anderen Antworten erwähnt wurden).
Thomas K

Antworten:

63

Oder verwenden Sie PyInstaller als Alternative zu py2exe . Hier ist ein guter Ausgangspunkt . Mit PyInstaller können Sie auch ausführbare Dateien für Linux und Mac erstellen ...

So könnte man PyInstaller ziemlich einfach verwenden, um das vorliegende Problem zu lösen:

pyinstaller oldlogs.py

Aus der Dokumentation des Tools:

PyInstaller analysiert myscript.py und:

  • Schreibt myscript.spec in denselben Ordner wie das Skript.
  • Erstellt einen Ordner, der im selben Ordner wie das Skript erstellt wird, falls dieser nicht vorhanden ist.
  • Schreibt einige Protokolldateien und Arbeitsdateien in den Erstellungsordner.
  • Erstellt einen Ordner dist im selben Ordner wie das Skript, falls dieser nicht vorhanden ist.
  • Schreibt den ausführbaren MyScript-Ordner in den dist-Ordner.

Im dist-Ordner finden Sie die gebündelte App, die Sie an Ihre Benutzer verteilen.

Zenpoy
quelle
9
cx_Freeze ist besser, es unterstützt sogar Python 3.3.
Ashwini Chaudhary
Hey, das funktioniert sogar mit Wein , zumindest bis zur Version 3.4 von Python, die Windows XP unterstützt. Echt super! Ich habe auf meinem Fedora Linux-Computer eine ausführbare Windows-Datei mit Wine , Python 3.4 und Pip-Win erstellt (folgen Sie einfach den Installationsanweisungen auf der Pyinstaller-Website).
Erik
3
@AshwiniChaudhary, beide scheinen plattformübergreifend zu sein. Wenn ich jedoch schnell beurteilen müsste, welche ich verwenden soll, basierend auf GitHubSternen, PyInstallerhat ~ 4000 Sterne, cx_Freezehat 200 Sterne. So PyInstallerscheint beliebt zu sein und wahrscheinlich mehr Grenzfälle abgedeckt hat. warum denkst du cx_Freezeist besser als PyInstaller?
Alpha_989
Beachten Sie, dass im Vergleich zu PyInstaller "cx_Freeze das Erstellen einer einzelnen Datei-Exe nicht unterstützt, bei der alle Bibliotheken für Ihre Anwendung in eine ausführbare Datei eingebettet sind." cx-freeze.readthedocs.io/en/latest/…
Taylor Edmiston
12

Ich empfehle PyInstaller , ein einfaches Python-Skript kann mit den folgenden Befehlen in eine Exe konvertiert werden:

utils/Makespec.py [--onefile] oldlogs.py

Dadurch wird eine Datei yourprogram.spec erstellt, die eine Konfiguration zum Erstellen der endgültigen exe darstellt. Der nächste Befehl erstellt die Exe aus der Konfigurationsdatei:

utils/Build.py oldlogs.spec

Mehr finden Sie hier

uhz
quelle
1
# -*- mode: python -*-

block_cipher = None

a = Analysis(['SCRIPT.py'],
             pathex=[
                 'folder path',
                 'C:\\Windows\\WinSxS\\x86_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_50c6cb8431e7428f',
                 'C:\\Windows\\WinSxS\\x86_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_c4f50889467f081d'
             ],
             binaries=[(''C:\\Users\\chromedriver.exe'')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='NAME OF YOUR EXE',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )
Xooonas
quelle