Pyhton in html laufen lassen

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Man kann AppEngine-Programme (http://appengine.google.com) auch unter einer eigenen Domain ansprechen, wenn man zusätzlich noch einen (ebenfalls kostenlosen) Google Apps Account (http://apps.google.com) anlegt. Die einzige Einschränkung ist, dass es nicht mit ANAMEs geht, sondern nur mit CNAMEs, d.h. "http://meineseite.de" geht nicht, nur "http://www.meineseite.de". Ob die Mühe, einmal einen Account bei Google einzurichten und eine SMS zu beantworten das Hosting von bis zu 10 Programmen wert ist, muss jeder selbst bewerten.

Man kann auch auf Heroku (http://www.heroku.com/) neben vielen anderen Alternativen Python Webapps laufen lassen und kommt häufig auch mit deren kostenlosen Kontingent aus. Das ist nicht ganz so einfach wie AppEngine, lässt aber mehr Freiheiten, weil man sich nicht an spezielle Google-APIs binden muss. Dafür muss man sich wahrscheinlich auch noch bei einem Anbieter einer DB registieren, z.B. MongoLabs.


Der Titel suggerierte allerdings eigentlich die Idee, Python (nicht Pyhton) im Browser ablaufen zu lassen. Diese nicht gemeinte Frage möchte ich auch noch beantworten: Es gibt mehrere Ansätze, die ich allerdings alle nicht für praktikabel halte. Cool sind sie dennoch. IronPython zusammen mit Silverlight wurde schon erwähnt. Silverlight ist allerdings tot. Ich denke auch nicht, dass IronPython aktiv weiterentwickelt wird. Gleiches gilt für Jython in einem Applet. Java auf dem Client (außer für Inhouse-Lösungen und IDEs), speziell Applets sind tot und für Jython gilt auch: Die Weiterentwicklung ist ein Hobbyprojekt, das schneckengleich voranschreitet.

Da im Browser nur JavaScript läuft (das IE auch noch VBScript kann, sei hier egal und auch Dartium, eine Variante von Chrome, die eine DartVM -- siehe http://dartlang.org -- soll nicht weiter erwähnt werden) bleibt als Alternative zu Plug-ins wie Silverlight oder Java (gibt es eigentlich ein Python in ActionScript für Flash?) nur das Übersetzung von Python nach JavaScript und das das indirekte Ausführen der Programme.

Man kann dazu Python in JavaScript übersetzen oder in JavaScript einen Python-Interpreter schreiben. Ersteres erzeuge schneller ablaufenden Code, bedeutet aber Abstriche in der Semantik, denn JavaScript hat nun mal einen andere Semantik als Python und einige Sachen werden so einfach nicht gehen.

Ältestes Projekt dieser Art ist glaube ich Pyjamas (http://pyjs.org/), wo (ähnlich zu GWT) auf dem Server Python in JavaScript kompiliert wird. Ähnliche Ansätze haben auch andere verfolgt, inklusive yours truly. Ich denke, auch Pypy kann oder konnte mal JavaScript erzeugen. Das Projekt http://www.skulpt.org/ macht alles im Browser. Einen Interpreter zur Verfügung stellen macht, EMScripten (http://emscripten.org), ein Projekt, mit dem C-Code mit Hilfe der LLVM-Toolsuite in JavaScript übersetzt werden kann und was auch das Original-CPython übersetzen kann.

Eine denkbare Mischform wäre, in JavaScript einen Interpreter für Python-VM-Bytecode zu schreiben und dann eine Serverkomponente zu haben, die Python-Quelltext in Bytecode übersetzen kann, damit man den vorhandenen Python-Parser nutzen kann. Für Ruby hat jemand mal diesen Ansatz probiert.

Ich denke jedoch nicht, dass Python eine sonderlich gute Sprache ist, um mit dem DOM oder anderen typischen JavaScript-APIs zu interagieren, da leichtgewichtige Funktionen und Closures in der Syntax fehlen. Man müsste dann auch noch ein eigenes API zum Browser haben, so wie Pyjamas es versucht. Dann ist man aber so alleine auf weiter Front, das es einfacher ist, JavaScript (oder meinetwegen CoffeeScript) zu lernen und zu benutzen.

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

quink hat geschrieben:soll ich jetzt extra englisch lernen nur um zu erfahren wie man hallo welt in python zum laufen bringt (ohne fertige Lösungen wie google app engine zu verwenden)? Hier sind doch Python Spezialisten die sich schon lange mit Python beschäftigen, weiß denn keiner von euch wie man das macht?
Da muss ich jetzt nochmal einhaken. Natürlich wissen hier einige wie man das macht, nämlich man öffnet die Dokumentation und liest es nach. Oder googled danach. Und falls das nicht klappt, kann man immer noch hier im Forum posten.

In deinem Fall wär der relevante Teil zu mod_wsgi und Django etwa diese Seite aus der Dokumentation. Zu der Dokumentation in Englisch gibt es hier im Forum eine Diskussion.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
quink
User
Beiträge: 10
Registriert: Mittwoch 25. April 2012, 10:44

@problembär
ich Danke dir für die Antwort, ich werde das heute Abend mal so probieren.

@sma
Jemand mit google Apps Erfahrung, sehr gut, ich habe da Fragen. Das was da google apps bietet (also ne Oberfläche wo man Python Programme laufen lassen kann) das will ich halt für mich auf meinem Webspace haben, darum gings mir.

Das was du noch schreibst ist interessant. Umwandeln von Python in Javascript, naja. Bei wiki steht: "Mehrere kommerzielle Projekte wie z. B. Eve Online, Google und Youtube nutzen zu Teilen Python".
Also muß da im Hintergrund Python ablaufen, für was auch immer. Und genau um dieses was auch immer darum gehts mir. Python in Webanwendungen dafür ist Python doch gedacht oder sehe ich das falsch? Aber die Frage bleibt, wie lasse ich Python Programme da laufen? Und auch die Frage drängt sich mir auf: Was kann Python? Wofür und für welche Webanwendungen kann ich Python benutzen?
deets

@quink

Python ist nicht "fuer Webanwendungen gedacht". PHP ist. Python ist eine allgemein verwendbare Programmiersprache, und zB EVE-Online nutzt das nicht (oder wenn, dann ist das Koinzidenz) fuer seine Webseiten, sondern in der Darreichungsform Stackless Python zur KI-Programmierung auf ihren Servern. Und unter anderem kann man damit auch Webanwendungen schreiben.

Womit sich deine Frage nach der Verwendbarkeit von Python etwas unscharf so beantworten laesst: fuer alles, wozu es schnell genug ist, und wo keine anderen technischen Randbedingungen es verhindern oder unguenstig machen.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

quink hat geschrieben:@problembär
ich Danke dir für die Antwort, ich werde das heute Abend mal so probieren.
Damit wird dein Ausflug in die Welt der Webprogrammierung mit Python allerdings schon fast vorbei sein, befürchte ich.
quink hat geschrieben: @sma
Jemand mit google Apps Erfahrung, sehr gut, ich habe da Fragen. Das was da google apps bietet (also ne Oberfläche wo man Python Programme laufen lassen kann) das will ich halt für mich auf meinem Webspace haben, darum gings mir.
Entweder machst du dich im Internet schlauf, oder du fragst deinen Hoster, wie du das Webframework "Django" auf dem Webspace einrichtest. Damit erreichst du schnell gut Ergebnisse. Die Lernkurve ist steil, dafür hast du dann schnell Spaß.
Allerdings weiß ich nicht ob du um englische Texte herum kommst. Ich glaube eher nicht.
Dafür erhälst du mit Django ein Framework, das dir viele Dinge abnimmt und erleichtert. Und mit dem am Ende auch viel, viel mehr möglich ist als eben nur "Hallo World". Da ist nämlich bei der Hand-zu-Fuß-CGI-Sache schon fast Schluss.

Das Problem ist übrigens nicht, dass es keine deutschen Texte gibt (hier ist z.B. etwas über Django), sondern dass die offizelle Dokumentation in Englisch ist. So ist der verlinkte Text schon wieder 4 Jahre alt und damit höchstwahrscheinlich veraltet und für eine alte Version gültig.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sparrow hat geschrieben:Entweder machst du dich im Internet schlauf, oder du fragst deinen Hoster, wie du das Webframework "Django" auf dem Webspace einrichtest. Damit erreichst du schnell gut Ergebnisse. Die Lernkurve ist steil, dafür hast du dann schnell Spaß.
Django ist schon prima, aber es ist ein Feature-Labyrinth. Man kann sich gerade als Anfänger erst einmal an diversen Stellen verirren die man überhaupt nicht braucht.

Ich würde für den Anfang eher etwas leichtes handliches wie bottle vorschlagen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

quink hat geschrieben:@sma
Jemand mit google Apps Erfahrung, sehr gut, ich habe da Fragen. Das was da google apps bietet (also ne Oberfläche wo man Python Programme laufen lassen kann) das will ich halt für mich auf meinem Webspace haben, darum gings mir.
Deine Formulierungen sind unscharf. Ich würde die AppEngine nicht als "Oberfläche" bezeichnen, sondern eher als Infrastruktur oder meinetwegen als Plattform, um das Buzzword "PaaS - Platform as a Service" zu bedienen. Auch einen Webspace könnte man mit viel gutem Willen als so etwas bezeichnen. Du kannst die AppEngine jedoch nicht in deinen Webspace integrieren, sondern ähnlich wie ein Webspace mit PHP bietet dir Google die Möglichkeit, neben statischen HTML-Seiten (und weiteren Ressourcen) eben auch Python-, Java- oder Go-Programme auf seinen Servern ablaufen zu lassen, auf dass diese Programme dann HTML-Seiten dynamisch generieren und andere Dinge machen können, wie z.B. Daten speichern, Emails verschicken oder Bilder analysieren.
quink hat geschrieben: Das was du noch schreibst ist interessant. Umwandeln von Python in Javascript, naja. Bei wiki steht: "Mehrere kommerzielle Projekte wie z. B. Eve Online, Google und Youtube nutzen zu Teilen Python".
Bei Wiki? Der mit den starken Männern? ;)

Python im Browser und Python auf dem Server sind zwei verschiedene Dinge. Den Server würde ich auch nicht "Hintergrund" nennen. Sondern eben Server. In Background-Prozess in einem Server ist noch einmal etwas anderes.

Um Python-Programme ablaufen zu lassen, würde ich empfehlen, mit bottle (http://bottlepy.org/) einzusteigen. Das ist klein, fein und gibt mir die Gelegenheit ein zwei Jahre altes Video von mir noch einmal zu erwähnen: http://vimeo.com/9352480 ;) Mit Bottle kannst du erst einmal auf deinem eigenen Rechner experimentieren. Es ist nicht auf die AppEngine angewiesen, kann aber damit zusammen funktionieren. Die große Lösung wäre Django. Sie wurde bestimmt auch schon hier erwähnt. Einfach so wie bei PHP ein bisschen Python-Code in HTML-Seiten schreiben, geht jedoch nicht (ja doch, könnte man, will man aber nicht). Das ist nicht der Python Weg.

Stefan
problembär

sparrow hat geschrieben:
quink hat geschrieben:@problembär ich Danke dir für die Antwort, ich werde das heute Abend mal so probieren.
Damit wird dein Ausflug in die Welt der Webprogrammierung mit Python allerdings schon fast vorbei sein, befürchte ich.
quink hat geschrieben:Das was da google apps bietet (also ne Oberfläche wo man Python Programme laufen lassen kann) das will ich halt für mich auf meinem Webspace haben, darum gings mir.
In dem offiziellen Video zu Google Apps wird so ziemlich das gleiche vorgeführt, was ich oben beschrieben habe:
Ein Webserver auf "http://localhost:8080", ein Button in einer html-Seite und ein Python-Skript, das daraufhin "Hallo" ausgibt.
Nur eben mit Google Apps anstatt mit CGI. Ist also genau so, wie man es macht.

@quink: Freut mich, daß Du es ausprobieren willst. Ich hab' oben noch einmal (gegen 18.00 Uhr) mein Posting leicht geändert, um dem Button die Aufschrift "Click me" zu geben. Bitte benutze die neue Fassung, vielleicht kann man sonst den Button nicht richtig erkennen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

/me hat geschrieben:Django ist schon prima, aber es ist ein Feature-Labyrinth. Man kann sich gerade als Anfänger erst einmal an diversen Stellen verirren die man überhaupt nicht braucht.
Wobei, das kann man zweierlei sehen. Django tut vor allem eines: Dinge vorgeben. Das ist meiner Meinung nach gerade für Anfänger *gut*. Es ist gut, dass Django ein ORM vorgibt, eine Templatesprache vorgibt und vor allem wichtig für Anfänger: eine Struktur vorgibt. Denn natürlich kann man alles in Bottle und Flask schön separieren, aber da muss man selbst mehr Arbeit reinsetzen und gerade Anfänger wissen nicht wie die korrekte Struktur ausschaut. Da kann man dann eine Funktion sehen die dann SQL aus Strings zusammensetzt, die Datenbank abfragt (schlechte Datenbankstruktur und SQL-Injection inklusive), HTML aus Strings zusammensetzt (XSS inklusive) und dieses Monstrum dann ausgibt. Daneben noch CSRF-Lücken, unsignierte Cookies, IFrame-Stealing etc. In Django ist vieles davon ein gelöstes Problem.

Ich muss da immer an meine Anfangszeit mit Python-Web-Development zurückdenken, wo gerade Rails rausgekommen war, und in Python die ersten me-too Web-Frameworks auftauchten. Damals gab es sowas wie Webware, etwas später kamen Django und TurboGears. TurboGears 0.7 war fein, weil alles irgendwie stimmig war, aber einige Sachen fehlten noch. Aber 0.8 hat ewig gedauert und dann haben sie den Fokus verloren und alles musste austauschbar sein (von Kid zu Genshi, von MochiKit zu jQuery, etc.) und es wurde sehr verwirrend. Dann kam noch Pylons raus, was die Fehler von TurboGears irgendwie beheben wollte. Zwischendrin wurde der WSGI-Standard geschrieben, aus Webware wurde WSGIKit und schließlich Python Paste und keiner verstand wozu es gut war. Ian Bicking schrieb dann ne Reihe von Blogposts wo er erklärte dass es ein Framewor k-Framework ist und es verstand immer noch keiner. In Zwischenzeit hat Django alles andere plattgemacht, TurboGears sollte auf Pylons aufsetzen und Pylons wurde Pyramid und hat zum ersten mal in seiner Geschichte annehmbare Dokumentation. Zwischendrin entstanden Mini-Frameworks mit 4-Buchstabennamen und Werkzeug, eine Werkzeugsammlung für WSGI wurde veröffentlicht. Die 4-Buchstaben-Frameworks verschwanden, weil Bottle und der Werkzeugs Framework-Aufsatz Flask erschienen und haben die anderen Micro-Frameworks redundant gemacht. Klingt kompliziert?

Daher sage ich: lern einfach Django. Fragen kannst du immer stellen, aber Django nimmt dir einige Anfängerfehler vorweg.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten