Je pensais utiliser un peu Python, mais je ne voulais pas installer diverses choses pour construire l'environnement. J'ai donc essayé de créer un environnement à l'aide de Docker.
Nous visons à créer un environnement dans lequel vous pouvez développer avec VS Code (ou serveur de code), en utilisant à la fois un environnement interactif et le Web. En particulier, j'étais accro à la connexion de l'extension Python de VS Code à Jupyter qui s'exécute sur Python dans Docker, je vais donc laisser une note de la procédure de construction de l'environnement dans cet article.
Créez un environnement de développement capable de faire tout ce qui précède.
Fonctionnement confirmé dans l'environnement suivant
Commencez par découper un répertoire de travail approprié.
$ mkdir python-dev && cd $_
Initialisez Git comme vous le souhaitez.
$ git init .
$ wget https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore --output-document=.gitignore
Utilisez Poetry pour la gestion des packages. Décrivez le Dockerfile et le docker-compose.yml pour créer l'environnement avec Poetry.
Dockerfile
FROM python:3.8.3-slim
WORKDIR /app
RUN pip install poetry
Spécifiez l'image de conteneur contenant la version de Python que vous souhaitez utiliser. À l'avenir, j'utiliserai l'image mince car je souhaite d'abord réduire la taille de l'image, tout en gardant à l'esprit que je souhaiterai installer divers packages dépendants dans l'image.
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"
Cette fois, pour faciliter l'accès à Jupyter dans le conteneur à partir de l'hôte, certains paramètres sont inclus pour désactiver la fonction de sécurité de Jupyter.
--NotebookApp.token=''
--NotebookApp.password=''
--NotebookApp.disable_check_xsrf=True
Si vous exécutez sur un serveur public plutôt que sur l'environnement local de votre ordinateur, vous devez éviter ce paramètre.
Une fois que le docker est prêt, configurez Poetry.
$ docker-compose run --rm web poetry init --no-interaction
$ docker-compose run --rm web poetry add jupyter notebook flask
Ajoutez une commande à $ poetry install
lors de la construction de Docker.
Dockerfile
FROM python:3.8.3-slim
WORKDIR /app
RUN pip install poetry
COPY pyproject.toml ./
RUN poetry install
Placez index.py pour lancer avec Flask.
index.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
Construisez et vous avez terminé.
$ docker-compose build
Après $ docker-compose up
--Utiliser avec CLI
- $ docker-compose run --rm web python --version
--Utiliser sur le Web
Tout d'abord, installez ce qui suit dans VS Code.
Sélectionnez le conteneur cible avec l'extension Docker sur VS Code et cliquez sur «Joindre Visual Studio Code».
Ouvrez la fenêtre VS Code pour accéder à distance au conteneur et installez Extension Python (ms-python.python) «Installer sur le conteneur» Cliquez sur le bouton pour installer et recharger le VS Code.
Succès si le Python affiché par > Python: Select Interpreter
etc. de VSCode est celui de Docker (dans cet exemple, Python 3.8.3 dans / usr / local / bin / python
) est.
Dans le VS Code attaché au conteneur comme ci-dessus, sélectionnez ʻExisting in
> Python: Spécifiez le serveur Jupyter local ou distant pour les connexionset entrez
http: // localhost: 8888 /. Vous pouvez également créer un fichier appelé
.vscode / settings.json`.
json:.vscode/settings.json
{
"python.dataScience.jupyterServerURI": "http://localhost:8888/"
}
Vous pouvez utiliser Jupyter sur VSCode en rechargeant VSCode et en faisant > Python: Create New Blank Jupyter Notebook
.
Si un mot de passe vous est demandé, tapez simplement Entrée avec des caractères vides.
Si vous utilisez code \ -server au lieu de VSCode, cela fonctionnera sur le navigateur, donc en particulier pour Chromebook, cela fonctionnera légèrement sur Chrome au lieu de l'environnement GUI Linux. Je vais. Étant donné que des fonctions étendues telles que Python peuvent être incluses dans le conteneur, il y a également l'avantage de pouvoir être codées pour chaque environnement de développement.
L'inconvénient est que la capacité d'image augmente. (Nécessite 1 Go supplémentaire)
Pour utiliser le serveur de code, créez le conteneur avec le serveur de code et les extensions.
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
Ajoutez également un service qui démarre le serveur de code à docker-compose.
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"
Maintenant, faites $ docker-compose build
et vous avez terminé. (Cela prendra du temps)
Vous pouvez utiliser VS Code sur votre navigateur en visitant http://127.0.0.1:8080.
Pour utiliser Jupyter avec un serveur de code, utilisez > Python: Spécifiez le serveur Jupyter local ou distant pour les connexions
pour spécifier le conteneur dans lequel jupyter est exécuté, tel que http: // note: 8888 /
.
json:.vscode/settings.json
{
"python.dataScience.jupyterServerURI": "http://note:8888/"
}
En outre, le texte intégral du code créé dans cet article se trouve dans le référentiel suivant.
https://github.com/s2terminal/python-dev
Recommended Posts