[PYTHON] Ich habe Flask mit Remote-Containern von VS Code ausprobiert

Überblick

Dies ist ein Memo, da Sie eine Python-Umgebung in einem Docker-Container mit der Erweiterung Remote-Container von VSCode erstellen können.

Zweck der Verwendung des Docker-Containers

Es gibt zwei Zwecke.

Das erste ist, dass die lokale Umgebung sauber ist. Es gibt Dinge wie Pyenv und Anaconda, die die Umgebung verändern, aber am Ende wird es lokal abhängig. Was ist die Python-Version, auch wenn ich Anforderungen stelle? Ich weiß nicht, ob es ein Befehl ist, ich kann ihn aus irgendeinem Grund nicht eingeben, ich kann Pip und Conda nicht mischen und manchmal weiß ich nicht, was es ist, aber ich habe das Gefühl, ich möchte meinen Abschluss machen.

Der zweite ist einfach bereitzustellen. Heutzutage berechne und biete ich manchmal Dienste in der Cloud anstatt auf dem lokalen PC an, daher möchte ich dies mit ein paar "Dockerfile" tun.

Das ist der Grund, warum Sie diese nicht sofort erhalten, aber in diesem Artikel werde ich bis zum Einrichten einer Flasche mit Remote-Container aufzeichnen.

Erstes Ergebnis

Ich habe die letzte Datei auf Github gelegt. yo16 / simple_flask

Endgültige Dateistruktur.


/simple_flask
    /.devcontainer
        Dockerfile
        devcontainer.json
    /simple_app
        /templates
            default.html
        app.py
    requirements.txt

Aber in diesem Artikel möchte ich Ihnen weder das Ergebnis noch den Inhalt der Erstellung mitteilen. Es handelt sich um eine Prozedur in VS Code, daher spielt es keine Rolle. Wenn Sie es satt haben, eine einfache Quelle für Flask zu erstellen, laden Sie diese bitte herunter und verwenden Sie sie.

Schritt 0: Bereiten Sie den Ordner vor

Erstellen Sie einen Ordner, um diese Umgebung zu erstellen. Diesmal "simple_flask".

Dateistruktur bis zu diesem Punkt.


/simple_app

Schritt 1: Kolben vorbereiten

Alles ist in Ordnung, also werde ich eine einfache machen.

Dateistruktur bis zu diesem Punkt.


/simple_flask
    /simple_app
        /templates
            default.html
        app.py

Ich werde den Inhalt von Flask nicht erklären, aber app.py hat "app.run ()" und "@ app.route (" / ")". Wenn Sie diese python app.py ausführen, wird die Flask-Site gestartet.

Schritt 2: Öffnen Sie mit VS Code und bereiten Sie Docker-Container vor

  1. Öffnen Sie den obersten Ordner / simple_flask mit VS Code
  2. Suchen Sie in der Erweiterung in der linken Symbolleiste nach "Remote-Containern"
  3. Installation

20200926_2.PNG

Schritt 3: Erstellen Sie eine Docker-Umgebung

  1. Klicken Sie auf den grünen Bereich wie> <unten links im VS-Code

  2. Wählen Sie "Remote-Container: Ordner im Container öffnen ..." aus den auf dem Bildschirm angezeigten. 20200926_4.PNG

  3. Wählen Sie den Ordner "simple_flask" und öffnen Sie ihn

  4. Wählen Sie "Python 3", wie es oben wieder angezeigt wird 20200926_5.PNG

  5. Es wird wieder herauskommen, wählen Sie also die entsprechende Python-Version aus 20200926_6.PNG

  6. Es wird wieder herauskommen, also ist es OK (dies ist das letzte) Übrigens, wenn Sie hier abhaken und selbst wenn 0 ausgewählt ist, wird etwas installiert, überprüfen Sie es also im späteren Verfahren. 20200926_7.PNG

  7. Wenn Sie dies bisher tun können, wird der folgende Bildschirm angezeigt. Der Punkt ist der Linux-ähnliche Bildschirm am unteren rechten Terminal. (Ist es wirklich) Dies ist bereits im Docker-Container und Bash wird ausgeführt. 20200926_8.png

Wenn ich es dort versuche, sieht es so aus und "simple_app" ist ebenfalls fest platziert.


root@c249cd5c6b06:/workspaces/simple_flask# ls -la
total 4
drwxrwxrwx 1 root root 4096 Sep 26 14:49 .
drwxr-xr-x 3 root root 4096 Sep 26 13:54 ..
drwxrwxrwx 1 root root 4096 Sep 26 14:49 .devcontainer
drwxrwxrwx 1 root root 4096 Sep 26 14:08 simple_app

Python ist ebenfalls enthalten.


root@c249cd5c6b06:/workspaces/simple_flask# python -V
Python 3.8.5

Schritt 4: Installieren Sie den Kolben

Da das Docker-Image von Python in Schritt 3-4 ausgewählt wurde, ist Python enthalten, aber natürlich gibt es keine Flasche, da es sich im ursprünglichen Zustand befindet. Also werde ich es einfügen. Stellen Sie dies zuerst auf die Konsole.


root@c249cd5c6b06:/workspaces/simple_flask# pip install flask
Requirement already satisfied: flask in /usr/local/lib/python3.8/site-packages (1.1.2)
Requirement already satisfied: Werkzeug>=0.15 in /usr/local/lib/python3.8/site-packages (from flask) (1.0.1)
Requirement already satisfied: click>=5.1 in /usr/local/lib/python3.8/site-packages (from flask) (7.1.2)
Requirement already satisfied: itsdangerous>=0.24 in /usr/local/lib/python3.8/site-packages (from flask) (1.1.0)
Requirement already satisfied: Jinja2>=2.10.1 in /usr/local/lib/python3.8/site-packages (from flask) (2.11.2)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.8/site-packages (from Jinja2>=2.10.1->flask) (1.1.1)

Das ist in ... (Schweiß Nun, ich denke, dass ich vielleicht andere Dinge einbauen möchte, also werde ich in diesem Fall mit diesem Verfahren fortfahren, also werde ich mit dem Tag fortfahren, der nicht enthalten war.

Erstellen Sie als Nächstes die Datei require.txt, damit das aktuell enthaltene Modul beim Erstellen des Docker-Containers automatisch installiert wird.

root@c249cd5c6b06:/workspaces/simple_flask# pip freeze > requirements.txt

Auf diese Weise können Sie dies natürlich im Docker-Container tun, aber Sie können es auch auf VSCode tun. Sie können es normal mit VS Code öffnen, um es zu überprüfen und zu bearbeiten.

20200926_9.PNG

Verwenden Sie dies im nächsten Schritt.

Schritt 5: Überprüfen und ändern Sie die Docker-Datei

Diejenige, die beim Erstellen eines Containers funktioniert, ist ". / Dockercontainer / Dockerfile".

Wenn Sie diese Datei mit VS-Code öffnen, sehen Sie verschiedene Dinge, die beim Öffnen des Docker-Containers funktionieren. (Ich benutze das Bild von Microsoft.)

Wie in Schritt 2-6 erläutert, muss hier "Node.js" installiert werden, unabhängig davon, ob es installiert ist oder nicht. Kommentieren Sie diesen Bereich aus und verwenden Sie "nodejs". Ich werde versuchen, es nicht zu tun. Sie benötigen die einfache Flasche in diesem Artikel nicht, aber wenn Sie sie benötigen, verwenden Sie sie.

Im Gegenteil, die in Schritt 4 erstellte Anforderung.txt wird nicht verwendet. Kommentieren Sie sie daher aus. Kopieren Sie es nach / tmp / pip-tmp /, pip install und löschen Sie es, wenn Sie fertig sind.

Die modifizierte Docker-Datei befindet sich unten.

# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.140.1/containers/python-3/.devcontainer/base.Dockerfile

# [Choice] Python version: 3, 3.8, 3.7, 3.6
ARG VARIANT="3"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

# [Option] Install Node.js
#### comment out
# ARG INSTALL_NODE="true"
# ARG NODE_VERSION="lts/*"
# RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi

# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
#### removed "#"
COPY requirements.txt /tmp/pip-tmp/
RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
   && rm -rf /tmp/pip-tmp

# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
#     && apt-get -y install --no-install-recommends <your-package-list-here>

# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1

Schritt 6: Starten Sie den Docker-Container erneut

Erstellen Sie den Container mithilfe der geänderten Docker-Datei erneut.

  1. Klicken Sie auf den grünen Bereich unten links 20200926_10.PNG

  2. Wählen Sie im Pulldown-Menü oben die Option "Remote-Container: Container neu erstellen" 20200926_11.PNG

Das ist alles! Danke für deine harte Arbeit.

Funktionsprüfung

Wenn Sie app.py mit Python vom Terminal unten rechts aus starten, wird der übliche Flask-Server gestartet.

root@acebfd6333f5:/workspaces/simple_flask# python ./simple_app/app.py
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Das ist es!

Recommended Posts

Ich habe Flask mit Remote-Containern von VS Code ausprobiert
Ich habe versucht, Runenfiguren mit Scikit-Learn handschriftlich zu erkennen
Ich habe versucht, Bilder von CIFAR-10 mit Keras-Bilderkennung zu erkennen.
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
[Python] Ich habe sofort versucht, die VS-Code-Erweiterung von Pylance zu verwenden.
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Ich habe versucht, die Eingabe für UE4 Python VS Code zu interpolieren
Arbeitsnotiz, die ich i18n mit Flask App ausprobiert habe
Ich habe versucht, das Bild mit Python + OpenCV "morphologisch zu konvertieren"
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Python mit VSCode (Windows 10)
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Ich habe versucht, mit PyCaret zu clustern
Debuggen Sie Python mit VS-Code
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, Djangos Server mit VScode anstelle von Pycharm zu starten
Einstellungen zum Eingeben und Debuggen des Inhalts der Bibliothek mit VS-Code
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, die handschriftliche Zeichenerkennung von Runenzeichen mit CNN mithilfe von Keras zu erkennen
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Ich habe versucht, Sätze mit summpy zusammenzufassen
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, Essen mit SinGAN zu bewegen
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, DeepPose mit PyTorch zu implementieren
Versuchen Sie, Jupyter mit VS-Code auszuführen
Ich habe versucht, das Gesicht mit MTCNN zu erkennen
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, Sätze mit GPT-2 zu generieren
Ich habe versucht, LightGBM mit Yellowbrick zu lernen
Installieren Sie Python mit Mac vs Code
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Ich habe das Jupyter-Notebook von VS Code ausprobiert
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Ich habe versucht, eine eigenständige Bereitstellung von Play with Fabric [AWS-Operation mit Boto] [Play Deployment] durchzuführen.
Holen Sie sich die stärkste Umgebung mit VS Code, Remote-Containern und Remote-Docker-Daemon
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
So entwickeln Sie Container auf Remote-Servern mit VS Code Remote-Containern
Ich habe versucht zu beheben "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren"
Ich war an Diagrammen interessiert und habe versucht, sie mit einer Flasche zu umwickeln
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, automatisch Bilder von Kanna Hashimoto mit Python zu sammeln! !!
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe eine multiple Regressionsanalyse mit Polypoly-Regression versucht
Ich habe versucht, eine SMS mit Twilio zu senden
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe einen kleinen Tello-Formationsflug mit Drohnen mit ESP32 versucht: DJI Tello-Drohnen-Formationsflug