Bestes Framework für Web-Apps mit Python-Code

Ich entwickle einige Algorithmen in Python, um wissenschaftliche Daten zu analysieren. Da die Algorithmen ständig verbessert werden, möchte ich diese über eine Web-App an Wissenschaftler in einem Firmenprojektteam ausrollen. Ich habe einige Erfahrung mit Python, aber sehr wenig mit Webtechnologien. Ich hoffe auf Vorschläge zum besten Ansatz, Web-Framework, CMS usw. Hier sind einige Anforderungen.

  • Ausführung innerhalb eines Firmen-Intranets
  • Kann Datendateien über einen Dateidialog hochladen
  • Kann Dateien in einer Datenbank mit durchsuchbaren Metadaten speichern
  • Kann in Python geschriebene Algorithmen ausführen
  • Kann Ergebnisse in Diagrammen und Tabellen anzeigen
  • Kann Ergebnisdatendateien auf die Computer der Benutzer exportieren
  • Ausreichende Dokumentation und Lernressourcen, um einem Nicht-Webentwickler die Implementierung zu ermöglichen

Antworten (3)

Ich würde vorschlagen, dass Sie sich Jupyter Notebooks ansehen . Sie können sie sogar in Ihrem Browser unter https://try.jupyter.org ausprobieren .

  • Jupyter Server kann auf Ihrem lokalen Computer oder irgendwo in Ihrem Netzwerk ausgeführt werden.
  • JupyterHub kann einen Mehrbenutzer-Hub erstellen, der mehrere Instanzen des Einzelbenutzer-Jupyter-Notebook-Servers erzeugt, verwaltet und per Proxy weiterleitet.
  • Sie können hier sogar ein Docker- Image eines Basis-JupyterHub als Ausgangspunkt herunterladen .
  • Umfangreiche wissenschaftliche Bibliotheken inklusive Visualisierung
  • Kann neue Notizbücher erstellen oder lokale Notizbücher auf den Server hochladen
  • Kann vorhandene Notizbücher für die lokale/Offline-Nutzung herunterladen
  • Jedes Notebook kann Dokumentation in markdown & mathjax , Code in einen der unterstützten Kernel, die Sie installiert haben , und die Ergebnisse der Ausführung des Codes einbetten.
  • Zu den unterstützten Kerneln gehören iPython und eine umfangreiche Liste anderer Sprachen, darunter R, Julia, Haskell, Ruby, JavaScript, C Sharpe, Forth, SCALA usw.
  • Die Ergebnisse eines bestimmten Laufs können als HTML- oder PDF-Dateien heruntergeladen werden.
  • Umfangreiche Plotterfunktion
  • Kostenlos, Gratis & Open Source
  • Umfangreiches Installations- und Konfigurationshandbuch
Ein funktionierendes Beispiel einer in Jupyter Notebook ausgeführten Web-App mit einem konfigurierbaren Diagramm und seinem Python-Code finden Sie in dieser Frage: Web-App zum Anzeigen von Diagrammen in Python . Ein Link zum Herunterladen des Quellcodes und der Eingabedaten wird in einem Kommentar unter der akzeptierten Antwort bereitgestellt.
Ich habe Jupyter Notebook lokal auf meinem Computer verwendet und mag es. Ich bin mir jedoch nicht sicher, ob es die Komplexität des Codes vor den Chemikern verbirgt, die es verwenden würden. Außerdem weiß ich nicht, wie es mit der Datenbank von Datendateien umgehen würde.
@EricShain - Wenn der Code, den Sie ausblenden möchten, als Python-Dateien oder -Module gekapselt und importiert wird, ist der sichtbare Code minimal, möglicherweise nur eine import module;module.run()Methode. IIRC gibt es auch die Möglichkeit, laufende Zellen zu verstecken/einzuklappen. Voreingestellte Datendateien können vom Serverdateisystem geladen werden, Benutzerdateien können von ihrem lokalen Computer geladen werden, und Sie könnten möglicherweise einen Upload-Mechanismus bereitstellen.
Obwohl ich Ihren Vorschlag von Jupyter zu schätzen weiß, denke ich, dass so etwas wie ein CMS, das die Speicherung und Suche von Datendateien übernimmt, sinnvoller wäre. Vielleicht ein CMS, das die Einbettung von Jupyter-Notebooks erlaubt.

Warum versuchen Sie es nicht mit einem Python-Webframework? Wie Flask?

Dies würde Ihnen die Flexibilität geben, die Sie benötigen, und Sie können es so gestalten, dass es tut, was Sie wollen.

Ich hatte auf einen konkreteren Vorschlag gehofft. Ich habe mir Flask, Django und Web2py angesehen. Da ich keine Erfahrung mit Webentwicklung habe, sind die Vor- und Nachteile für mich schwer zu bestimmen.
Flask ist insofern sehr uneingeschränkt, als Sie ihm sagen können, dass es alles tun kann, ohne dass komplizierte Datenbankmodelle und so weiter erforderlich sind. Schauen Sie sich eine Beispiel- App an. Es ist sehr, sehr einfach, sich einen Überblick zu verschaffen, wenn Sie über Python und ein wenig HTML-Kenntnisse verfügen.
Obwohl ich keinen Zweifel daran habe, dass Flask meine Anforderungen umsetzen kann, scheint es mir doch niedriger zu sein als andere Frameworks. Ich habe so gut wie keine Erfahrung in der Webentwicklung. Ich hatte gehofft, dass das Framework vorgefertigte Funktionen für zumindest einige meiner Anforderungen wie die Datenverwaltung bereitstellen könnte.
Meinst du vielleicht wäre ein CMS besser?
Ja, aber viel Glück bei der Suche nach einem vorgefertigten CMS, das alle Anforderungen erfüllt, die Sie benötigen. Kenne ich schon. Sie könnten Ihr eigenes CMS mit Flask erstellen und nur ein Javascript-Ajax haben, um Python-Code auszuführen, oder Sie können Django ausprobieren, ein anderes Framework, das Flask sehr ähnlich ist. Beide wären geeignet, da alles auf Python basiert - was Ihre Benutzer verwenden werden.

Wenn Sie das Budget dafür haben, können Sie (wie es das Unternehmen, für das ich arbeite, tun) einen Enterprise GitHub hinter Ihrer Firewall (Preis derzeit 2.500 USD pro 10 Benutzer / Jahr) oder in einem sicheren Bereich auf GitHubs-Servern hosten einen geeigneten Tunnel.

  • Vertraute Benutzeroberfläche für Entwickler
  • Stellt auch "GitHub-Seiten" bereit, um allgemeine Veröffentlichungen zu ermöglichen
  • Releases-Mechanismus
  • Überprüfungsmechanismen
  • Suchwerkzeuge
  • Großer Dateispeicher
  • GitHub kann Jupyter/iPython Notebooks ( .ipynbDateien) rendern, wie hier angekündigt .

Die Verwendung von Jupyter Notebooks, die auf einer GitHub-Instanz gehostet werden , ermöglicht es Ihnen , wie Sie hier sehen können, beschreibenden Text, Formeln, Code, Diagramme, Bilder und sogar YouTube-Videos zu mischen.

Die Galerie interessanter Jupyter-Notebooks auf GitHub zeigt die Bandbreite der verfügbaren Inhalte.

NB Ich bin ein regelmäßiger GitHub-Benutzer, arbeite aber nicht für sie und habe keine anderen finanziellen Interessen am Unternehmen.