IronPython und Mono im Vergleich zu py2exe

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
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Bin mal wieder auf IronPython aufmerksam geworden und steig nicht so ganz dahinter, was das Ziel dabei ist :roll:

Mono ist ja plattformunabhängig und sowohl für Windows, Linux, BSD, Mac OS X, Solaris und einige andere Unixe verfügbar. Mit IronPython kann ich wohl normalen Python-Code schreiben und in Mono benutzen/ausführen.

Mal abgesehen davon, dass IronPython auf .NET Komponenten zugreifen kann und umgekehrt… Kann Mono aus meinem Python-Code ein betriebssystemspezifisches Binary plus Bibliotheken erzeugen -> also compilieren <- ähnlich zu py2exe? Nur eben unter allen von Mono unterstützten Plattformen?

Oder nutzt Mono auch sowas wie eine Virtual Machine, also eine Art Interpreter bzw. JIT-Compiler und muss dann auf jedem Zielgerät installiert sein, um meine IronPython-Anwendung auszuführen?
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mono macht .NET "binaries". Bytecode mit exe ähmlichem Header. py2exe macht .pyc Dateien, bytecode ohne Header. Und warum hab ich immer die Probleme mit exe Dateien nicht?

Jetzt mal ganz allgemein gefragt, warum kann man den Sourcecode nicht mitliefern?
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

droptix hat geschrieben:Oder nutzt Mono auch sowas wie eine Virtual Machine, also eine Art Interpreter bzw. JIT-Compiler und muss dann auf jedem Zielgerät installiert sein, um meine IronPython-Anwendung auszuführen?
Hallo droptix!

Grob gesagt:

Um ein .NET-Programm unter Windows ausführen zu könne, muss .NET installiert werden. Um ein .NET-Programm unter Linux ausführen zu könne, muss MONO installiert sein.

Wenn du .NET-/MONO-Programme unter beiden Plattformen ausführen willst, dann musst du schon beim Programmieren darauf achten, nur diese .NET-/MONO-Komponenten zu verwenden, die in beiden Systemen implementiert sind.

.NET-Programme brauchen also auf jeden Fall ein

[ich glaube mein computer stürzt gleich ab -- zwischenspeichern]
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

blackbird hat geschrieben:Mono macht .NET "binaries". Bytecode mit exe ähmlichem Header. py2exe macht .pyc Dateien, bytecode ohne Header. Und warum hab ich immer die Probleme mit exe Dateien nicht?
Was ist ein .exe-ähnlicher Header und was macht das aus?

py2exe macht .exe Dateien :D -> und dort drin steckt dann die reine .pyc Datei, verlinkt mit dem Python-Interpreter plus Module?
blackbird hat geschrieben:Jetzt mal ganz allgemein gefragt, warum kann man den Sourcecode nicht mitliefern?
Es geht mir nicht um Quellcode-Schutz, sondern darum, keine Python-Installation beim Anwender auf dem Zielgerät vorauszusetzen. Meine Python-Applikation als systemspezifisches Binary kann dann einfach gestartet werden, auch wenn sie wegen dem eingebundenen Python-Interpreter etwas größer ist.
BlackJack

.NET-EXEn sind EXEn mit einem kleinen "nativen" Programm das die .NET-VM startet oder eine Fehlermeldung ausgibt, wenn die nicht installiert ist. Nach diesem kleinen "echten" Programm kommt der Bytecode für die VM in der Datei.

IronPython-Programme brauchen nicht nur die .NET-VM auf dem Zielrechner, sondern auch IronPython.
pythonist
User
Beiträge: 40
Registriert: Sonntag 14. Mai 2006, 17:28

Soviel ich weiß gehen IronPython-exes schon ohne IronPython nur mit .Net. Allerdings halt ich IronPython mitlerweile für sinnlos vorallem von der Menthalität der Leute dahinter:
1. Man kann dinge wie Tkinter nicht verwenden sondern soll auf .Net sachen zurückgreifen, allerdings hab ich in der kurzen Zeit in der ich mich mit IronPython beschäftigt hab keine anständige Übersicht über .Net-Bibliotheken gefunden.
2. Man kann PythonCode nicht so kompilieren dass man es aus anderen .Net Sprachen verwenden kann

Also ist IronPython nur gut um .Net-Anwendungen in Python zu schreiben die dann nur mit IronPython gehn. Allerdings will niemand auf ner Linux-Maschine n PythonProgramm mit Mono ausfürhen weils einfach paradox ist. Somit geht die Eigenschaft der Plattformunabhänigkeit verloren und drum macht IronPython für mich keinen Sinn.

Ich find den Ansatz von Jython um längen besser wobei das bei mir mit BeautifulSoup auch noch nicht so recht klappen will, allerdings sobald das geht werd ich meine Sachen in ne .jar packen und so den Winlern geben.

pythonist
BlackJack

Man braucht IronPython. Wenn ich die `IronPython.dll` entferne, dann kommt sowas hier:

Code: Alles auswählen

new@s8n2:~$ ./ipytest.exe

** (./ipytest.exe:9021): WARNING **: The following assembly referenced from /home/new/ipytest.exe could not be loaded:
     Assembly:   IronPython    (assemblyref_index=0)
     Version:    1.0.2467.24713
     Public Key: (none)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

gerold hat geschrieben:[ich glaube mein computer stürzt gleich ab -- zwischenspeichern]
Hallo!

Ich bin wieder zurück. Jetzt sollte alles wieder korrekt funktionieren. :-)

Wie ich sehe, hat sich eh schon alles geklärt. Dann brauche ich nichts mehr schreiben. ;-)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

pythonist hat geschrieben:Soviel ich weiß gehen IronPython-exes schon ohne IronPython nur mit .Net. Allerdings halt ich IronPython mitlerweile für sinnlos vorallem von der Menthalität der Leute dahinter:
1. Man kann dinge wie Tkinter nicht verwenden sondern soll auf .Net sachen zurückgreifen, allerdings hab ich in der kurzen Zeit in der ich mich mit IronPython beschäftigt hab keine anständige Übersicht über .Net-Bibliotheken gefunden.
Öh, also so schwer kann es doch nicht sein, den entsprechenden Startmenü-Knopf zu drücken. Zumindest zu meiner Windows-Zeit gabs nach der Installation des .NET-SDK ein schönen Startmenü-Knopf ".NET-Framework Dokumentation".

Alternativ sucht man eben online in der Mono-Dokumentation oder in der MSDN Library. Man kann Microsoft ja viel vorwerfen, mangelnde Dokumentation allerdings nicht!

Btw, Tkinter sieht unter Linux sowieso beschissen aus, außerdem gibt es seit langem Gtk# und Qt#!
2. Man kann PythonCode nicht so kompilieren dass man es aus anderen .Net Sprachen verwenden kann
Das kann nicht sein! IronPython compiliert Python-Code in IL, und das ist per Definition aus jeder anderen .NET-Programmiersprache benutzbar.
Inter können IL-Methoden und Funktionen zwar nicht-IL ausführen, das Interface allerdings ist immer sprachunabhängig (ansonsten ist das Ganze kein .NET-Code)
Allerdings will niemand auf ner Linux-Maschine n PythonProgramm mit Mono ausfürhen weils einfach paradox ist.
Wieso? Der Nutzer weiß doch in der Regel gar nicht, welche Sprache hinter einer .NET Anwendung steht. Das ist ja irgendwie auch der ganze Sinn von .NET ;)
Wenn man sich erstmal an .exe Dateien auf Linux-Systemen gewöhnt hat, ist Mono recht akzeptabel.
Ich find den Ansatz von Jython um längen besser
Abgesehen von der Tatsache, dass Jython stable ist und auf die JVM abzielt, sehe ich genau keinen Unterschied zwischen IronPython und Jython. Die dahinter stehende Idee und das Design sind sich verdammt ähnlich.
BlackJack

Sofern sich da in letzter Zeit nichts geändert hat, kann man Python-Code nicht von anderen .NET Sprachen aus benutzen, jedenfalls nicht so, dass Python-Objekte den anderen Sprachen so einfach als Objekte zur Verfügung stehen. Die erwarten nämlich mehr oder weniger statische Klassen.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

BlackJack hat geschrieben:Sofern sich da in letzter Zeit nichts geändert hat, kann man Python-Code nicht von anderen .NET Sprachen aus benutzen, jedenfalls nicht so, dass Python-Objekte den anderen Sprachen so einfach als Objekte zur Verfügung stehen. Die erwarten nämlich mehr oder weniger statische Klassen.
Afair soll das DLR lösen.
TUFKAB – the user formerly known as blackbird
Antworten