Mal wieder: Kompilieren von Python Quellcode

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Yuzuke
User
Beiträge: 10
Registriert: Dienstag 6. Juli 2010, 12:38

Hallo,

ich habe jetzt ein wenig gegoogelt, aber irgendwie bin ich aus den bisher bestehenden Forenthreads die es im Internet so gibt nicht schlau geworden was die Kompilierung von Python zu .exe Dateien angeht.

Folgende Situation: Ich habe diverse Python Skripte (derzeit 5 werden aber noch mehr), die außer sich selbst noch random einbinden. Nun möchte, dass aus diesen 5 Scripts am Ende EINE .exe Datei herauskommt, die der User starten soll. Meinetwegen kann er um die anderen Dateien "mitzunehmen" auch diverse .dll oder sonstwas anlegen, aber wichtig ist, dass am Ende eine Datei rauskommt, wo auch jeder "DAU" erkennt, DAS ist die Datei, die ich starten muss.

Es gibt py2.exe - funktioniert aber nicht mit Python 3, das ich verwende, so wie ich das bisher gesehen habe. Es gibt py2app - funktioniert nur auf Mac OS X, ich will aber Windows oder noch besser Plattformübergreifend. Dann gibt es noch dieses cx_Freeze, das ich probiert habe und es nicht damit hinbekomme irgendwelche Exe Dateien zu erstellen.

1) Gibt es vielleicht noch andere Möglichkeiten lauffähige (standalone) Exe's zu erstellen?
2) Wenn nein, kann mir dann nochmal jemand erklären wie cx_Freeze funktioniert, da ich es ja scheinbar nicht verstanden habe?
3) Wenn auch dieser Strick reißt: Python Programme können nicht ohne weiteres in exe Dateien kompiliert werden, weil dann die entsprechenden Bibliotheken fehlen würden, ohne die kein Prozessor der Welt weiß was er da machen soll. Kann ich dann nicht irgendwie erreichen, dass er meine 5 Python Skripte zu einer Exe formt und gleichzeitig die random.py, die ich einbinde mitzurechnet? Dann wäre doch alles vorhanden.

Danke. :)
lunar

Es gibt noch pyinstaller, das funktioniert zumindest für Linux und Windows. Ob es Python 3 unterstützt, weiß ich nicht.

Unter Linux allerdings ist diese Art der Distribution im Allgemeinen allerdings nicht gerne gesehen, da man durch dank der Paketverwaltung benötige Abhängigkeiten sehr einfach installieren kann.

Ich würde Dir ja eher empfehlen, die Skripte mit distutils in ein vernünftiges Python-Paket zu verwandeln und mit einer guten Installationsanleitung zu versehen.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Oder schau mal hier (PortablePython + OneFileExecutable mit NSIS):
http://www.python-forum.de/viewtopic.php?f=1&t=22928
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Yuzuke
User
Beiträge: 10
Registriert: Dienstag 6. Juli 2010, 12:38

lunar hat geschrieben:Es gibt noch pyinstaller, das funktioniert zumindest für Linux und Windows. Ob es Python 3 unterstützt, weiß ich nicht.

Unter Linux allerdings ist diese Art der Distribution im Allgemeinen allerdings nicht gerne gesehen, da man durch dank der Paketverwaltung benötige Abhängigkeiten sehr einfach installieren kann.

Ich würde Dir ja eher empfehlen, die Skripte mit distutils in ein vernünftiges Python-Paket zu verwandeln und mit einer guten Installationsanleitung zu versehen.
Pyinstaller unterstützt leider kein Python 3, fällt daher weg. Und distutils fällt leider weg, da es sich um DAU's handelt, die wahrscheinlich nicht mal Python installiert kriegen.
ms4py hat geschrieben:Oder schau mal hier (PortablePython + OneFileExecutable mit NSIS):
<span><a class="smarterwiki-linkify" href="http://www.python-forum.de/viewtopic.ph ... </a></span>
Das wäre von den Vorschlägen das einzige was gehen würde, denke ich (wenn ich jetzt nicht irgendwo überlesen habe, dass es doch kein Python 3 unterstützt). Ich bin den Anweisungen auf deiner Homepage gefolgt, habe mich dann aber verheddert (wie gesagt, bin Anfänger - wenn es an Batchdateien und ähnliches geht, habe ich keine Ahnung mehr).

http://ms4py.org/2010/05/05/python-portable-windows/

Step 1: Ich hab meinen Python Ordner auf der Festplatte gesucht und irgendwo anders hin kopiert (Kopiert, nicht STRG+x und dann STRG+v), z.B. auf den Desktop
Step 2: Naja 26.dll wahr es bei mir nicht mehr, aber ich habe natürlich die 31.dll in den Python Ordner auf dem Desktop kopiert.
Step 3: Anschließend natürlich den Kram von Microsoft geholt und ebenfalls dazugepackt.
Step 4: Hier fängts an bei mir zu hapern. Batchfile für Debugging? Also soll ich einfach nur eine test.bat machen? "Adjust the path to the executable and change the scriptname if needed." => Nichts verstanden, sorry.
Step 5: Naja, ausführen konnte ich es nicht, da ich nicht wusste wie ich es erstellen soll.

Und Step 6 verstehe ich auch nicht ganz (vllt. kann ich es mir aber auch nicht vorstellen, da ich ja noch nicht bis da gekommen bin).

Mal rein Interesse halber: Warum kann man nicht die Logik, die man in Python programmiert mit ein paar Klicks in eine andere Sprache konvertieren, die dann ohne den Interpreter (+ den ganzen Zusatzkram wie die Module) auskommt. Also dass man an eine .exe über den Umweg Python->C++->Exe rankommt. Geht sowas nicht?

Nochmals Danke...
lunar

@Yuzuke: Du könntest auch einen Blick auf IronPython werfen. Damit kannst Du Python-Quelltext in .NET-IL kompilieren und somit eine .NET-EXE daraus erzeugen. Da das .NET-Framework auf modernen Windows-Systemen vorinstalliert ist, sollte das für einen normalen Nutzer kein Problem sein. Allerdings unterstützt auch IronPython kein Python 3, wohl aber Python 2.7 (zumindest als Alpha), so dass Du Dein Programm möglicherweise einfach rückportieren kannst (Python 2.7 enthält einen Großteil der 3.x-Features).

Generell ist eine Konvertierung in andere Sprachen für eine beschränkte Untermenge von Python möglich (siehe rpython oder cython). Für Python selbst aber ist das sehr schwer, da Python ein ungleich dynamischeres und komplexeres Objektmodell hat als Sprachen, die typischerweise kompiliert werden (e.g. C#, Java, C++).
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Also, Schritt 1-3 natürlich richtig.

Zu Schritt 4:
- "Debugging" heißt nur, dass der "PAUSE"-Befehl eingefügt ist. Damit bleibt das Fenster nach einem Fehler offen und muss nicht über die Konsole ausgeführt werden.
- Pfad zur Executable müsste in deinem Fall Python31\python.exe lauten
- Skriptname wird ja klar sein
(Edit: Ja du sollst eine *.bat mit diesen Befehlen machen.)

Schritt 5: Ohne Zusatz-Bibliotheken ist dieser nicht nötig

Schritt 6: Bei der einfachen Variante fehlt einfach das "PAUSE"

Wenn weitere Frage auftauchen, einfach melden.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Moin,
ich benutze immer dieses Tool : http://code.google.com/p/gui2exe/
Es ist sehr leicht zu bedienen.

MfG
Schaf220
Yuzuke
User
Beiträge: 10
Registriert: Dienstag 6. Juli 2010, 12:38

Schaf220 hat geschrieben:Moin,
ich benutze immer dieses Tool : http://code.google.com/p/gui2exe/
Es ist sehr leicht zu bedienen.

MfG
Schaf220
Hallo,

hab ich jetzt auch gerade mehrfach versucht. Ist ja eigentlich nur eine Grafische Oberfläche für die bereits bestehenden Python -> Exe Programme. Also nochmal die Liste durchgehen:

bbFreeze kann ich nicht benutzen, weil es kein Python 3 unterstützt
cxFreeze ist eines der wenigen, was Python 3 unterstützt. Problem: Hier (http://wiki.wxpython.org/cx_freeze) steht, dass ich nicht nur die entsprechende Python Version, sondern auch wxPython brauche - wunderbar, aber wxPython für Python3.1 gibts nicht. Also kann ich das wohl auch vergessen. (Ich hab es trotzdem mehrfach ohne wxPython versucht, woraufhin nur Fehlermeldungen kamen wie no commands supplied)
Py2Exe geht nicht mit Python 3
Py2App nur für Mac, ich will aber mindestens Windows, am besten Plattformübergreifend -> Fällt auch weg
PyInstaller -> Kein Python 3

Damit fällt Gui2Exe natürlich auch weg.

Was bleibt? Es bliebe IronPython (muss ich gestehen habe ich mir noch nicht angeguckt, werde ich jetzt machen, da langsam echt die altenativen ausgehen), es bleibt dieses NSIS und es bleibt distutils (wobei ich das ja nicht benutzen möchte, damit man später nicht noch Python extra zu installieren hat...)

Kann es sein, dass man wenn man Python 3.x benutzt total aufgeschmissen ist bei diesem Thema?

@ ms4py:

Ich habe jetzt in eine test.bat einfach


@echo off
SET PYTHONPATH=Python31/Python.exe
Python31\python script.py
PAUSE

reingeschrieben. Python31/Python.exe stimmt soweit, da ist auch wirklich die Python exe zu finden. Aber - tut mir leid - ich habe echt keine Ahnung auf welche Python Datei ich jetzt verweisen soll, weswegen ich nicht weiß was ich anstatt python script.py da reinschreiben soll.

Irgendwelche Zusatzbibliotheken habe ich nicht hinzugepackt, außer cxFreeze, dass ich gleich aber wieder lösche, weil es ja irgendwie nicht geht. Oder geht es bei euch mit Python 3 doch, obwohl da gemeint ist, dass man wxPython (was es nicht für 3.x gibt) nötig ist?

Fragen über Fragen...
Benutzeravatar
Empi
User
Beiträge: 26
Registriert: Montag 29. März 2010, 14:05

Kann es sein, dass man wenn man Python 3.x benutzt total aufgeschmissen ist bei diesem Thema?
Leider ja. Hatte das gleiche Problem wie du und musste downgraden.
Es gibt einfach die ein oder andere Situation, in der man eine EXE braucht :oops:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie kommst du darauf dass du für cx_Freeze wxPython brauchst? Im wxPython-Wiki steht dass man wxPython braucht um wxPython-Applikationen mit cx_Freeze zu packen, aber das ist nicht verwunderlich. Sofern du kein wxPython nutzt, solltest du kein wxPython brauchen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Du musst eben den Namen von "deinem" gewünschten Skript angeben, ist doch logisch.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Antworten