Spaß zusammen: Python + Kolben + Google App Engine

  • Tutorial
Hintergrund: Ich, wie viele auf Habrahabr, höre verdammt gerne Musik. Am häufigsten mache ich das auf VKontakte. Manchmal ist eine bereits erstellte Wiedergabeliste ärgerlich - Sie möchten etwas Neues. aber damit es sich nicht viel von dem unterscheidet, was bereits da ist. Hierzu gibt es Empfehlungen zu allen Diensten, die die Möglichkeit bieten, Musik zu hören. Ehrlich gesagt, sind die Empfehlungen zu VK für mich entsetzlich. Vielleicht gefällt es jemandem, aber aufgrund meiner Auswahl möchte ich den Browser schließen (IMHO natürlich). Im Allgemeinen habe ich beschlossen, diese Situation für mich zu beheben und meine eigenen Empfehlungen mithilfe der APIs VKontakte und Last.fm umzusetzen. Da ich viel über die Google App Engine gehört und gelesen habe, sie aber nie verwendet habe, wurde beschlossen, dieser Plattform beizutreten.

Ich muss gleich sagen, dass ich hier nicht auf die Feinheiten der Interaktion mit der API oder den Algorithmus zur Auswahl von Empfehlungen eingehen werde. Darüber - vielleicht in den folgenden Artikeln. In diesem Artikel wird nur das Erstellen, Konfigurieren und Bereitstellen einer Anwendung auf der Google App Engine-Plattform mit Python und Flask beschrieben.
Über Tippfehler und Ungenauigkeiten informieren Sie bitte in PM. Vielen Dank.

Also fangen wir an. Wir gehen zu appengine.google.com . Wenn Sie dort noch nicht autorisiert sind, werden Sie aufgefordert, einen Nutzernamen / ein Passwort für Ihr Google-Konto einzugeben.

Nach erfolgreicher Autorisierung sehen wir die Schaltfläche "Create Application" (oder eine Liste von Anwendungen, falls vorhanden). Nach meinem Kenntnisstand können mit Google ohne zusätzliche Investitionen bis zu 25 Anwendungen erstellt werden (richtig, wenn ich falsch liege). Eine Liste weiterer Kontingente finden Sie durch Anklicken des Links .

Nachdem Sie auf die Schaltfläche geklickt haben, werden Sie zu einem Formular weitergeleitet, in dem Sie die Anwendungs-ID (noch nicht belegt) und den Namen sowie die Authentifizierungsoptionen auswählen können. Wir stimmen den Nutzungsbedingungen zu und klicken auf die Schaltfläche, um die erste Anwendung zu erstellen. Geschaffen, eine Art Freude. Jetzt ist Ihre Anwendung ist verfügbar unter http: // [Kennung] .appspot.com , wo Kennung- Die eindeutige Kennung der von Ihnen ausgewählten Anwendung. Die Anwendung ist verfügbar, funktioniert aber natürlich nicht - es gibt nichts zu arbeiten. Korrigieren Sie die Situation.

Laden Sie ggf. PyCharm herunter . Bei der Auswahl der Version des Editors fällt eine leichte Nuance auf: PyCharm, die Professional Edition, bietet eine integrierte Unterstützung für die Google App Engine, die in den in die IDE integrierten Bereitstellungstools zum Ausdruck kommt. PyCharm CE bietet keine solche Unterstützung, daher müssen Sie es über die Konsole bereitstellen.

Erstellen Sie ein Projekt in PyCharm. Wenn Sie Professional Edition verwenden, können Sie beim Erstellen eines Projekts den Typ "Google App Engine-Projekt" auswählen. In diesem Fall müssen Sie die Kennung Ihrer Anwendung (die oben angegebene Kennung) sowie den Pfad zum App Engine-SDK angeben. Laden Sie sie daher vorab herunter. Hier können Sie das SDK für jede unterstützte Programmiersprache herunterladen . PyCharm erstellen Sie ein Projekt mit bereits in der Konfigurationsdatei gefüllt app.yaml und Hauptskript Arbeit main.py .

Eigentlich ist das Hauptskript:
main.py
import webapp2
class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello world!')
app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

Dieses Beispiel finden Sie sowohl im Google App Engine- Handbuch für Python selbst als auch auf der JetBrains-Website. Es gibt nichts Bemerkenswertes im Skript - Standard HelloWorld. Ich sage nur für diejenigen, die nicht wissen, dass webapp2 ein leichtes Framework ist, das mit der Google App Engine kompatibel und recht einfach zu verwenden ist ( na ja , soweit ich es verwendet habe).

Konfigurationsdatei:
app.yaml
application: pygask
version: 1
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico
- url: .*
  script: main.app
libraries:
- name: webapp2
  version: "2.5.2"

Lassen Sie uns die Konfiguration analysieren:
  • Anwendung - unsere Anwendungskennung (lassen Sie das Wort "Pygask" nicht verwechseln - dies ist eine freie Abkürzung für Python + Gae + Flask :));
  • Handler - Eine Liste von URL-Mustern und eine Beschreibung, wie damit umgegangen werden soll. In der Handler-Direktive können Sie zwei Arten von Handlern verwenden - statische Handler und Skripthandler. Die Statik wird in diesem Fall vom Favicon Loader dargestellt. Skripte sind das Hauptskript zum Starten der Anwendung main.app (Achtung! Es ist keine Erweiterung erforderlich.py ).
  • Bibliotheken - Bibliotheken, die erforderlich sind, damit die Anwendung funktioniert; in diesem Fall webapp2. Python 2.7, das mit der Google App Engine ausgeführt wird, unterstützt einige sofort einsatzbereite Bibliotheken. Eine vollständige Liste finden Sie hier .

Eine detaillierte Beschreibung der Konfiguration der Google App Engine-Anwendung finden Sie hier .

Im Allgemeinen ist unsere erste Anwendung bereit, ihre Funktion zu testen. Führen Sie das Projekt in PyCharm aus. Auf dem lokalen Computer ist es verfügbar unter: 127.0.0.1 : 8080 (wenn Sie in der Projektkonfiguration nichts geändert haben). Wenn beim Öffnen "Hallo Welt!" Angezeigt wird, funktioniert alles.

Was ist, wenn Sie PyCharm nicht verwenden, aber dennoch das Projekt starten möchten?
Linux-Methode: Führen Sie im Terminal den Befehl im folgenden Format aus:
/dev_appserver.py --host 127.0.0.1 
Zur Verdeutlichung gebe ich den Befehl, mit dem ich pygask in der Konsole starte (vorausgesetzt, dass sich sowohl das SDK als auch der Projektordner in befinden /var/www/):
andymitrich@pc:~$ python /var/www/google_appengine/dev_appserver.py --host 127.0.0.1 /var/www/pygask/
Wir tippen etwas Ähnliches in das Terminal und öffnen 127.0.0.1:8080 und sehen hoffentlich "Hallo Welt!".

In Bezug auf Windows-Benutzer ist dort alles ein bisschen anders. Das SDK wird heruntergeladen und auf dem Computer installiert und der Google App Engine Launcher wird zum Starten des Projekts verwendet. Ich kann nichts über Mac OS sagen - vielleicht wird es Ihnen in den Kommentaren jemand sagen.

Leider ist das webapp2-Framework nicht das, was wir brauchen. Schließen wir deshalb den Kolben an.

Da flask nicht in der Liste der standardmäßig aktiven Bibliotheken aufgeführt ist, müssen wir uns zunächst um die Verbindung kümmern. Google App Engine unterstützt die Möglichkeit, die verwendeten Module separat zu konfigurieren. Dies geschieht in einer Datei namens appengine_config.py . Mehr über ihn hier. Wir werden es verwenden, um das Framework zu verbinden. Dazu installieren Sie mit pip flask im internen Verzeichnis und nennen es lib . Mach es entweder manuell
andymitrich@pc:~$ pip install -t /var/www/pygask/lib/ flask
Oder verwenden Sie die Datei requirements.txt
andymitrich@pc:~$ pip install -r /var/www/pygask/requirements.txt -t /var/www/pygask/lib/
Achten Sie auf den Parameter -t- er enthält den Pfad zur Installation des Pakets.

Flask ist installiert, du kannst es benutzen - wir werden die Konfiguration und das Hauptskript ein wenig umschreiben:
  1. In der app.yaml- Anwendungskonfiguration können Sie den Abschnitt mit der Libraries-Direktive entfernen - wir brauchen ihn nicht.
  2. Das Hauptskript sieht jetzt so aus:
    main.py
    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def home():
         return 'Hello world!'
    

Damit die Anwendung den installierten Kolben abholen kann, geben wir in der Datei appengine_config.py den Speicherort an.
appengine_config.py
import site
import os.path
site.addsitedir(os.path.join(os.path.dirname(__file__), 'lib'))

Wir versuchen anzufangen - wir sehen immerhin "Hallo Welt!".

Verleihen Sie dem Projekt ein mehr oder weniger koscheres Aussehen: Fügen Sie das Anwendungspaket, Ordner für statische Dateien und Vorlagen hinzu, entfernen Sie Handler und Ansichten in separaten Dateien. tun Sie so, als würden Sie ein normales Kolbenprojekt bauen. Nach all den vorgenommenen Manipulationen sieht der Projektbaum folgendermaßen aus:

Dann können Sie ihn in eine beliebige Richtung entwickeln.

Ich werde Ihre Aufmerksamkeit darauf lenken, wie sich die Originaldateien geändert haben:
  • Hauptskript, das jetzt aus einer Zeile besteht
    main.py
    import application
    
  • Projektkonfigurationsdatei
    app.yaml
    application: pygask
    version: 1
    runtime: python27
    api_version: 1
    threadsafe: yes
    handlers:
    - url: /favicon\.ico
      static_files: favicon.ico
      upload: favicon\.ico
    - url: .*
      script: main.application.app

In der Konfigurationsdatei hat sich der Pfad zum Hauptskript geändert - ein Hinweis auf das Anwendungspaket wurde hinzugefügt.

Sagen wir die angezeigte „Hallo Welt!“ Ist zum ersten Mal genug. Lassen Sie uns auf appspot.com bereitstellen. Eigentlich gibt es auch hier nichts Kompliziertes. Aber bevor ich anfange, möchte ich noch etwas Wichtiges sagen: Im Entwicklungsprozess gibt es viele Arbeitsdateien, die auf dem Server nicht benötigt werden. Um zu verhindern, dass sie während der Bereitstellung dorthin gelangen, können Sie in der Anwendungskonfiguration alles angeben, was nicht in der Direktive skip_files festgelegt werden soll. Weitere Details .

Wenn Sie ein zufriedener PyCharm-Benutzer sind, müssen Sie die „schwierigste“ Operation ausführen: Tools -> Google App Engine -> App Engine-App hochladen ... Wenn dies die erste Bereitstellung ist, wählen Sie die für Sie geeignete Autorisierungsmethode aus (ich habe das E-Mail / Passwort-Paar nicht herausgefunden - warum Diese Daten passten nicht zusammen, also habe ich OAuth2 verwendet und mich nicht darum gekümmert.) Und voila, Sie können zu http: // [bezeichner] .appspot.com (in diesem Fall pygask.appspot.com ) gehen und das Ergebnis Ihrer Arbeit anzeigen .

Wenn Sie aus irgendeinem Grund die oben genannte IDE nicht verwenden, steht das Rezept für Sie in einer Zeile (Linux-Methode):
/appcfg.py 
Dementsprechend benutze ich:
andymitrich@pc:~$ python /var/www/google_appengine/appcfg.py --oauth2 /var/www/pygask/

--oauth2Achten Sie auf den Parameter , der für die Autorisierung durch OAuth2 benötigt wird. Geben Sie es nicht an - sie werden aufgefordert, E-Mail / Passwort einzugeben. Bei erfolgreicher Vervollständigung des Teams steht Ihr Projekt unter der entsprechenden Adresse zur Verfügung.

Das ist alles, ich hoffe, dass das Material jemandem nützlich sein wird. Wenn es interessant ist, erzähle ich Ihnen in Zukunft, wie ich im Rahmen dieser Idee Spaß mit den VKontakte- und Last.fm-APIs hatte und wozu das alles führte. Vielen Dank für Ihre Aufmerksamkeit.

PS Der Code steht auf dem Github: Pygask .

Jetzt auch beliebt: