Kann man ein Python3-Programm compilieren ?

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
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Hallo zusammen,

momentan arbeite ich mich in Python mit PyQT/PySide und SQLite ein (unter Linux). Weil ich am besten mit "Learning by Doing" lernen kann, habe ich nach der Durcharbeitung einiger Tuts mit einem grösseren Projekt begonnen. Da Qt nun mal am besten für C++ dokumentiert ist und man damit ein lauffähiges Programm erhält, stelle ich mir immer wieder die Frage, ob es nicht sinnvoller wäre, C++ zu lernen und mein Projekt damit zu realisieren.

Das erste Argument hat sich jetzt insofern abgeschwächt, als ich jetzt herausgefunden habe, dass PySide für mich noch besser dokumentiert ist als PyQt.

Was das 2. Argument angeht, war ich bislang auf dem Wissensstand, dass man nur Python2-Programme irgendwie auch compilieren kann.

Heute habe ich hier http://qt-project.org/wiki/Building_PySide_on_Linux (glaube ich) auch gefunden, wie das man das machen kann. So ganz blick ich da aber nicht durch ! Gerne würde ich das mal anhand eines kleinen Beispiels durchexerzieren. Wenn das nämlich geht, könnte ich beruhigt bei meinem mittlerweile heissgeliebten Python bleiben. Die Königslösung wäre, wenn das dann auch noch für Windows ginge. (Was ich nicht glaube, denn ein bisschen ein Realist bin ich wohl schon :lol: )

Kennt sich damit jemand aus und kann mir vielleicht auch sagen, ob das auch mit meinem momentanen, aktuellen Python 3.3.3 und Pyside 1.2.1 funktioniert ?

Grüße
m-o
BlackJack

@mephisto-online: Auf der verlinkten Seite steht wie man PySide kompiliert — das besteht ja auch C++-Quelltext.

CPython kompiliert automatisch den Quelltext in Bytecode, egal welche Version Du verwendest. Das sind die *.pyc-Dateien.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

BlackJack hat geschrieben:Das sind die *.pyc-Dateien.
Und die liegen immer in __pycache__ ?

Im Prinzip muss man die dann mit allen pyc-Dateien der benutzten Pakete (cmake modul1, modul2 ... ?) zusammenlinken und hat dann ein lauffähiges, natives Programm ?
BlackJack

@mephisto-online: Nein, ein ”natives” Programm bekommst Du nicht. Und mit ``cmake`` schon mal gar nicht.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Danke für die Auskunft !
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mephisto-online hat geschrieben:ob es nicht sinnvoller wäre, C++ zu lernen und mein Projekt damit zu realisieren.
Meiner Meinung nach, nein. Oder: in aller Regel, nein. Das hängt natürlich ab was du genau machen willst, aber C++ zu lernen ist ne Aufgabe die dich jahrelang beschäftigen kann für einen womöglich sehr zweifelhaften Vorteil. Dazu müsste man wissen, was du mit C++ bezwecken willst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@mephisto-online: Auf der anderen Seite: So oft wie Du hier schon gefragt hast ob es nicht sinnvoll wäre C++ zu lernen, solltest Du es vielleicht doch mal angehen, damit Du Dir selber ein Bild machen kannst. Hier immer wieder die gleiche Frage zu stellen und ähnliche Antworten zu bekommen, scheint Dich ja nicht restlos zu überzeugen. :-)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Wobei so eine Frage in einem Python- oder C++-Forum zu stellen ein wenig seltsam ist.
Was für eine Antwort erwartest du denn?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Auf der anderen Seite: So oft wie Du hier schon gefragt hast ob es nicht sinnvoll wäre C++ zu lernen, solltest Du es vielleicht doch mal angehen, damit Du Dir selber ein Bild machen kannst.
Ja, das stimmt wohl. Hier einige empfohlene Bücher.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn du unbedingt C++ lernen möchtest (das ist zumindest mittlerweile mein Gefühl), dann mach das doch einfach. Am Ende wirst du aber die selben Probleme haben wie jetzt, da der Unterschied zwischen Python und C++ nicht so riesig ist. Zumindest nicht bei Beispielcode. Dafür bekommst du mit Templates und Speicherwerwaltung einen ganzen Haufen an Aufgaben, die du wahrscheinlich nicht so leicht bewältigen wirst.

Bei dir scheint sich irgendwie eingebrannt zu haben: Ich bekomme die relativ unspektakuläre Aufgabe mit dem einfachen Tool Python nicht gelöst, daher steige ich jetzt auf das viel komplexere C++ um, damit wird es sicher einfacher sein.
Das Leben ist wie ein Tennisball.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

war den ganzen Tag ausnahmsweise mal ohne Internet unterwegs ...

Aufgrund meiner Unkenntnis habe ich die o.g. Website vollkommen falsch interpretiert, vielleicht war es auch einfach nur schon zu spät :

Ganz am Anfang hatte ich mit Basic meine ersten Programme geschrieben, mit Interpreter und nativ. Danach kamen nur noch Sprachen mit Compiler (Pascal->PCode für P-Maschine, C->nativ-, Java->Bytecode für JVM, C#-> .NET, C++->nativ). Als ich jetzt mit Python begonnen hatte, muss ich zugeben, dass ich mich mit der in den Tuts immer wieder aufgetauchten Aussage "Python läuft auf einem Interpreter" zufrieden gegeben und da auch nicht weiter nachgeforscht hatte. Als mir dann BlackJack direkt rübergereicht hat, dass beim Compilieren von Python kein nativer Code entsteht, bin ich der Sache nachgegangen und mir ist klar geworden, das ich vollkommenen Blödsinn gedacht hatte, als ich die von mir oben genannte Webseite gelesen habe und dachte: "Hurra, damit kann man von einem Python-Programm ein Executable machen !". Wegen Basic war bis dahin für mich ein Interpreter ein Stückchen Software, was nativ auf einer realen Maschine läuft und ein Compiler macht halt direkt nativen Code.

Dass man bei Python mit Bytecode auf der PVM arbeitet, weiss ich erst seit heute Nacht.

Vorher war mir aber schon mal dieses über den Weg gelaufen :
PyInstaller reads a Python script written by you. First it analyzes your code to discover every other file your script needs in order to execute. Then it finds, copies, and collects all those other files -- including the active Python interpreter! -- and puts them with your script in a single folder, or optionally in a single executable file.
Quelle: http://pythonhosted.org/PyInstaller/#ov ... it-does-it
Das hatte ich dummerweise mit dem in Verbindung gebracht, was in meinem eingangs genannten Link gelesen hatte.

Werde es mir in Zukunft aber dreimal überlegen, ob ich hier nochmal nachfrage, wenn ich irgendwelche Einsteiger-Zusammenhänge-Verständnis-Probleme habe. Vielleicht habe ich ja irgendwann mal qualifiziertere Fragen, die man hier stellen kann, ohne direkt abgebürstet statt aufgeklärt zu werden. Bei diesem Thema hätte es ja gereicht, wenn mir jemand z.B. gesagt hätte: "Ey, das, was da steht, hat nichts mit dem zu tun, was Du denkst !" oder so. Ist aber vielleicht von mir etwas zu locker gedacht für dieses Forum.

Und das es besser ist, Qt mit C++ zu programmieren, kann man im Internet immer wieder lesen. Und dass C++ mit den Qt-Libs gegenüber dem "Standard"-C++ erheblich einfacher zu programmieren sei, auch. Ist es da nicht verständlich, dass man dadurch immer wieder verunsichert wird ?

Und wieso wird man hier (ausser von Leonidas ) nicht bestärkt in der Überzeugung, mit PyQt oder PySide auf dem richtigen Weg zu sein? Statt dessen nur ein "Dann machs doch in C++, wirst schon sehen, was Du davon hast !".

@darktrym
In diesem Forum hier hast Du recht ! In einem C++-Forum hatte ich schon lange und aufschlussreiche Unterhaltungen über genau dieses Thema ! Die Leute dort haben eine durchaus respektable Meinung über Python und waren auch der Meinung, dass, wenn keine der besonderen Fähigkeiten von C++ (z.B. Echtzeit-Prämissen) gebraucht werden, es besser ist, in Java oder halt auch in Python zu programmieren.

Aber seltsamerweise hat hier niemand tatsächlich auf meine Frage geantwortet und die war nicht: "soll ich es besser mit C++ machen", sondern wie kann ich mit Python ein Executable hinbekommen.

Leider habe ich schon wieder, wie für mich offensichtlich typisch, keine Ahnung, dieses mal, wie man denn so ein Thema wieder schliessen kann, wenn es erledigt ist.
BlackJack

@mephisto-online: Du hast Dich gleich im ersten Absatz im ersten Beitrag zu diesem Thema gefragt ob es nicht sinnvoller wäre Dein Projekt in C++ zu realisieren. Das war also sehr wohl auch die Frage. Und Du hast sie nicht das erste mal gestellt. Und immer die Antwort bekommen das C++ eher komplexer und damit komplizierter ist, und man sich das nur aus gutem Grund antun sollte. Hättest Du dieses mal eine andere Antwort erwartet? Du scheinst den Antworten ja nicht zu trauen, und dann bleibt halt nur selber Erfahrungen sammeln.

Das Compiler nicht direkt nativen Code erstellen müssen geht aus Deiner Sprachenauflistung bei Pascal, Java, und C# doch hervor. Alles Sprachen die üblicherweise kompiliert werden und Java und C# üblicherweise *nicht* in nativen Code, und bei Pascal ist P-Code zumindest eine Option.

Themen werden üblicherweise hier nicht geschlossen. Benutzer können es nicht, und Moderatoren machen es nur wenn Diskussionen ausarten. Das müssen sie dann aber schon wirklich deftig, denn ich kann mich jetzt gerade nicht erinnern wann es das letzte mal war.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mephisto-online hat geschrieben:Werde es mir in Zukunft aber dreimal überlegen, ob ich hier nochmal nachfrage, wenn ich irgendwelche Einsteiger-Zusammenhänge-Verständnis-Probleme habe. Vielleicht habe ich ja irgendwann mal qualifiziertere Fragen, die man hier stellen kann, ohne direkt abgebürstet statt aufgeklärt zu werden. Bei diesem Thema hätte es ja gereicht, wenn mir jemand z.B. gesagt hätte: "Ey, das, was da steht, hat nichts mit dem zu tun, was Du denkst !" oder so. Ist aber vielleicht von mir etwas zu locker gedacht für dieses Forum.
Wir können nicht in deinen Kopf schauen was du weißt, was nicht, was du richtig verstanden hast, was nicht. Generell ist das Thema halt erstens kompliziert und zweitens nicht wirklich wert sich den Kopf zu zerbrechen. Kompliziert weil: CPython verarbeitet Python-Quellcode und wandelt es in Python-Bytecode der auf der Python-VM läuft. Einerseits. Andererseits kann es sein dass alternative Implementationen wie PyPy bestimmten Python-Code nehmen und ihn zur Laufzeit mit einem JIT-Compiler kompilieren und dann nativen Code ausführen. Irrelevant weil: das passiert eh alles hinter deinem Rücken.

Die Python-zu-ausführbare-Datei "Compiler" machen auch nix anderes als die Python-VM mit dem Bytecode zu verkleben und dann hast du eine "ausführbare" Datei. Über Sinn und Zweck einer solchen Lösung lässt sich streiten, ich finde dieses Feature reichlich sinnlos und mehr Zeitverschwendung als es wert ist.
mephisto-online hat geschrieben:Und das es besser ist, Qt mit C++ zu programmieren, kann man im Internet immer wieder lesen.
Wo kann man das lesen? Andersrum habe ich es schon gehört, dass C++ besser mit Qt zu programmieren ist, weil Qt einige praktische Sachen mitbringt, die in C++ nützlich sind, auch wenn man keine GUIs bastelt.
mephisto-online hat geschrieben:Und dass C++ mit den Qt-Libs gegenüber dem "Standard"-C++ erheblich einfacher zu programmieren sei, auch. Ist es da nicht verständlich, dass man dadurch immer wieder verunsichert wird ?
Du verdrehst hier glaub ich was. In deinem vorherigen Satz hast du behauptet Qt ist mit C++ besser zu programmieren (als etwa mit Python) und hier behauptest du dass C++ besser mit Qt zu programmieren ist, als ohne Qt. Das sind zwei verschiedene Aussagen.
mephisto-online hat geschrieben:Und wieso wird man hier (ausser von Leonidas ) nicht bestärkt in der Überzeugung, mit PyQt oder PySide auf dem richtigen Weg zu sein? Statt dessen nur ein "Dann machs doch in C++, wirst schon sehen, was Du davon hast !".
Weil du offenbar in jedem Post C++ erwähnst und so klingst als wärst du von der Entscheidung Python zu nutzen nicht überzeugt. Daher einfach die Idee: probier doch beides mal aus: schreib eine (nicht allzu große, nicht allzu kleine) Qt-Applikation in C++ und in Python, dann siehst du wo bei den jeweiligen Sprachen Vor- und Nachteile sind.
mephisto-online hat geschrieben:Aber seltsamerweise hat hier niemand tatsächlich auf meine Frage geantwortet und die war nicht: "soll ich es besser mit C++ machen", sondern wie kann ich mit Python ein Executable hinbekommen.
Weil du diese Frage nicht gestellt hast. Zumindest nicht so dass man es versteht, was du willst. Die Antwort ist nämlich dass man weder Python 2 noch Python 3 kompilieren kann, aber beide können in eine EXE gepackt werden. Für Python 2 gibts da py2exe, cx_freeze und PyInstaller, für Python 3 scheint derzeit nur cx_freeze zu existieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Leider habe ich das Thema schon falsch definiert, weil ich noch nichts von der Existenz der PVM wusste, obwohl ich jetzt bei meinem Projekt schon fast die komplette Programmsteuerung, das Daten-Handling (File-I/O und SQLIte-DB) und die Berechnung mit PyQt fertiggestellt habe und gerade damit anfange, Grafiken zu programmieren. Das war dumm, ich hatte mich bislang nur mit der Programmierung, noch nicht mir den Grundlagen von Python auseinandergesetzt.

Leonidas hat mir aber jetzt auch meine eigentliche Frage zu meiner vollsten Zufriedenheit beantwortet. Danke ! Das "Packen" eines Python-Programms bringt also eigentlich nichts.

Ich hatte laienhafterweise davon geträumt, dass man mit solchen "Compilaten" eine kürzere Laufzeit erzielen kann, falls man bei 3D-Grafiken "Ruckel-Probleme" bekommt. Sollte dem so sein, kann man ja auch noch C-Module zu programmieren.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mephisto-online hat geschrieben:Ich hatte laienhafterweise davon geträumt, dass man mit solchen "Compilaten" eine kürzere Laufzeit erzielen kann, falls man bei 3D-Grafiken "Ruckel-Probleme" bekommt. Sollte dem so sein, kann man ja auch noch C-Module zu programmieren.
Achso, also wenn du durch dieses Packen Performancesteigerungen erhofft hattest - nein, die gibt es nicht. Du kannst entweder den Code optimieren (bringt oft viel, hatte erst diese Woche ein Haskell-Programm durch geschickte Optimierung deutlich verbessern können) oder bevor du auf C-Module setzt kannst du noch Cython ausprobieren, welches eine Python-artige Syntax mitbringt und C-Module generiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Wenn man nur alles, was im Normalfall genau so zusammen abläuft, lediglich zusammenpackt, kann es natürlich nicht schneller sein.

Ja, aber da hast du recht: durch Optimierung von Algorithmen lassen sich immer noch die grössten Geschwindigkeits-Steigerungen erzielen !

Aber Cython kannte ich noch nicht ! Schau ich mir mal an ! Guter Tip ! Danke !
Antworten