Ich dachte, ich würde Python ein wenig verwenden, aber ich wollte nicht verschiedene Dinge installieren, um die Umgebung aufzubauen. Also habe ich versucht, mit Docker eine Umgebung zu erstellen.
Wir möchten eine Umgebung schaffen, in der Sie mit VS Code (oder Code-Server) sowohl in einer interaktiven Umgebung als auch im Web entwickeln können. Insbesondere war ich süchtig danach, die Python-Erweiterung von VS Code mit Jupyter zu verbinden, das unter Python in Docker ausgeführt wird. Daher werde ich in diesem Artikel einen Hinweis auf die Vorgehensweise beim Erstellen der Umgebung hinterlassen.
Erstellen Sie eine Entwicklungsumgebung, die all das kann.
Betrieb in der folgenden Umgebung bestätigt
Schneiden Sie zuerst ein geeignetes Arbeitsverzeichnis aus.
$ mkdir python-dev && cd $_
Initialisieren Sie Git nach Ihren Wünschen.
$ git init .
$ wget https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore --output-document=.gitignore
Verwenden Sie Poetry für die Paketverwaltung. Beschreiben der Docker-Datei und der Datei docker-compose.yml zum Erstellen der Umgebung mit Poetry.
Dockerfile
FROM python:3.8.3-slim
WORKDIR /app
RUN pip install poetry
Geben Sie das Container-Image an, das die Version von Python enthält, die Sie verwenden möchten. In Zukunft werde ich das schlanke Image verwenden, da ich zunächst die Größe des Images reduzieren möchte, wobei ich bedenke, dass ich verschiedene abhängige Pakete im Image installieren möchte.
docker-compose.yml
version: '3.4'
services:
web:
build: .
volumes:
- .:/app
environment:
- FLASK_APP=index.py
ports:
- 127.0.0.1:5000:5000
command: "poetry run flask run --host=0.0.0.0"
note:
build: .
volumes:
- .:/app
ports:
- 127.0.0.1:8888:8888
command: "poetry run jupyter notebook --no-browser --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.disable_check_xsrf=True"
Dieses Mal sind einige Einstellungen enthalten, um die Sicherheitsfunktion von Jupyter zu deaktivieren, damit Sie vom Host aus bequem auf Jupyter im Container zugreifen können.
--NotebookApp.token=''
--NotebookApp.password=''
--NotebookApp.disable_check_xsrf=True
Wenn Sie auf einem öffentlichen Server und nicht in der lokalen Umgebung Ihres Computers ausgeführt werden, sollten Sie diese Einstellung vermeiden.
Sobald der Docker fertig ist, richten Sie Poetry ein.
$ docker-compose run --rm web poetry init --no-interaction
$ docker-compose run --rm web poetry add jupyter notebook flask
Fügen Sie beim Erstellen von Docker einen Befehl zu "$ poet install" hinzu.
Dockerfile
FROM python:3.8.3-slim
WORKDIR /app
RUN pip install poetry
COPY pyproject.toml ./
RUN poetry install
Platzieren Sie index.py, um mit Flask zu starten.
index.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
Bauen und fertig.
$ docker-compose build
Nach $ docker-compose up
$ docker-compose run --rm web python --version
--Verwenden Sie im WebInstallieren Sie zunächst Folgendes in VS Code.
Wählen Sie den Zielcontainer mit der Docker-Erweiterung in VS Code aus und klicken Sie auf "Visual Studio-Code anhängen".
Öffnen Sie das VSCode-Fenster für den Remotezugriff auf den Container und installieren Sie Python-Erweiterung (ms-python.python) "Auf Container installieren". Klicken Sie auf die Schaltfläche, um den VS-Code zu installieren und neu zu laden.
Erfolg, wenn der von VSCodes > Python: Select Interpreter
usw. angezeigte Python der in Docker ist (in diesem Beispiel Python 3.8.3 in / usr / local / bin / python
) ist.
Wählen Sie im VS-Code, der wie oben beschrieben an den Container angehängt ist, "Vorhanden" in "> Python: Lokalen oder Remote-Jupyter-Server für Verbindungen angeben" und geben Sie "http: // localhost: 8888 /" ein. Alternativ können Sie eine Datei mit dem Namen ".vscode / settings.json" erstellen.
json:.vscode/settings.json
{
"python.dataScience.jupyterServerURI": "http://localhost:8888/"
}
Sie können Jupyter auf VSCode verwenden, indem Sie VSCode neu laden und > Python: Neues leeres Jupyter-Notizbuch erstellen
ausführen.
Wenn Sie nach einem Passwort gefragt werden, geben Sie einfach die Eingabetaste mit Leerzeichen ein.
Wenn Sie anstelle von VSCode code \ -server verwenden, funktioniert dies im Browser. Insbesondere für Chromebooks funktioniert es daher problemlos in Chrome anstelle der Linux-GUI-Umgebung. Ich werde. Da erweiterte Funktionen wie Python in den Container aufgenommen werden können, besteht auch der Vorteil, dass sie für jede Entwicklungsumgebung codiert werden können.
Der Nachteil ist, dass die Bildkapazität zunimmt. (Benötigt zusätzliche 1 GB)
Um den Code-Server zu verwenden, erstellen Sie den Container mit dem Code-Server und den Erweiterungen.
Dockerfile
FROM python:3.8.3-slim AS python
WORKDIR /app
RUN pip install poetry
COPY pyproject.toml ./
RUN poetry install
FROM python AS code-server
RUN apt-get update && apt-get install -y curl
RUN curl -fsSL https://code-server.dev/install.sh | sh
RUN code-server \
--install-extension ms-python.python \
--install-extension ms-ceintl.vscode-language-pack-ja
Fügen Sie außerdem einen Dienst hinzu, der den Code-Server startet, um Docker-Compose zu erstellen.
docker-compose.yml
version: '3.4'
services:
web:
build:
context: .
target: python
volumes:
- .:/app
environment:
- FLASK_APP=index.py
ports:
- 127.0.0.1:5000:5000
command: "poetry run flask run --host=0.0.0.0"
note:
build:
context: .
target: python
volumes:
- .:/app
ports:
- 127.0.0.1:8888:8888
command: "poetry run jupyter notebook --no-browser --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.disable_check_xsrf=True"
code:
build:
context: .
target: code-server
ports:
- 127.0.0.1:8080:8080
volumes:
- ./:/app
entrypoint: "code-server --auth none --bind-addr=0.0.0.0:8080 /app"
Jetzt mache $ docker-compose build und du bist fertig. (Es wird einige Zeit in Anspruch nehmen) Sie können VS Code in Ihrem Browser verwenden, indem Sie http://127.0.0.1:8080 besuchen.
Um Jupyter mit dem Code-Server zu verwenden, verwenden Sie > Python: Geben Sie den lokalen oder Remote-Jupyter-Server für Verbindungen an
an, um den Container anzugeben, in dem Jupyter ausgeführt wird, z. B.http: // note: 8888 /
.
json:.vscode/settings.json
{
"python.dataScience.jupyterServerURI": "http://note:8888/"
}
Darüber hinaus befindet sich der vollständige Text des in diesem Artikel erstellten Codes im folgenden Repository.
https://github.com/s2terminal/python-dev