[PYTHON] Créez un environnement de développement confortable avec VSCode x Remote Development x Pipenv

Aperçu

Gérez l'environnement d'exécution Python avec Docker et Pipenv et utilisez-le comme [VSCode] ](Https://code.visualstudio.com/) Développement à distance présente le mécanisme de commutation. L'actualité que Facebook s'est associée à Microsoft pour cette fonctionnalité est une fonctionnalité à chaud ces jours-ci. Les avantages de l'introduction de ceci sont:

--Docker: les bibliothèques dépendantes (LAPACK, etc.) et les paramètres de variables d'environnement qui ne peuvent pas être gérés par Pipenv peuvent également être gérés. --Pipenv: Les packages requis uniquement pour le développement (autopep8, etc.) peuvent être gérés séparément de l'environnement d'exécution, et la gestion des dépendances est plus facile que pip. --VSCode: peut être développé de manière transparente sur le conteneur docker construit avec les deux ci-dessus, et diverses extensions sont puissantes

Il y a de telles choses, alors je pense que le mérite de créer un environnement de développement en les combinant est formidable. L'image est composée comme suit.

image.png

Nous introduisons également des extensions et des paramètres recommandés pour développer Python avec VS Code!

Information sur la version

Préparation

Je pense qu'il existe différents articles qui expliquent en détail autre que celui officiel, veuillez donc vérifier chacun d'eux si ce qui précède est insuffisant.

Étapes de construction environnementale

  1. Créez un Dockerfile
  2. Créez un fichier Pipfile
  3. Décrivez la méthode de construction pour l'environnement d'exécution dans docker-compose.yml
  4. Installez les extensions de développement à distance
  5. Décrivez les paramètres spécifiques au développement à distance dans docker-compose.extend.yml
  6. Décrivez les paramètres requis dans .devcontainer.json
  7. Tapez une commande avec VS Code et construisez !!

Je pense que ceux qui exploitent des produits utilisant Docker ou Pipenv ont déjà fait 1 à 3, alors veuillez passer à 4. C'est un long chemin à parcourir, mais faisons de notre mieux pour créer un environnement confortable!

Comment expliquer

Décrivez le fichier de paramètres avec la structure suivante. J'expliquerai le rôle de chaque fichier et comment le créer dans l'ordre. Lisez {repo-name} comme nom du référentiel et {tool-name} comme répertoire racine de l'outil de développement.

{repo-name}
├── .devcontainer
│   ├── devcontainer.json
│   └── docker-compose.extend.yml
├── Dockerfile
├── Pipfile
├── docker-compose.yml
└── {tool-name}

Créer un Dockerfile

J'ai honte de dire que je ne suis pas très familier avec Docker, donc je pense qu'il y a beaucoup de choses à faire, mais par exemple, créer un environnement sous la forme suivante.

Dockerfile


# Python 3.8 est mince-buster semble être recommandé
#référence: https://pythonspeed.com/articles/base-image-python-docker-images/
FROM python:3.8-slim-buster

#Définir les variables d'environnement
ENV HOME /root
ENV TZ Asia/Tokyo
WORKDIR $HOME

#Installer diverses bibliothèques utilisées en Python
# software-properties-common et wget sont requis pour une installation ultérieure de clang 8
RUN set -ex \
  && apt-get update \
  && apt-get install -y g++ git openssh-client wget libblas-dev liblapack-dev gnupg software-properties-common make

#installer clang 8
#Puisque numba dépend de llvmlite, installez la série clang 8 ensemble
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \
  && add-apt-repository "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-8 main" \
  && apt-get update \
  && apt-get -y install clang-8 lldb-8 lld-8 gfortran

# llvm-Enregistrez le chemin d'accès à la configuration
ENV LLVM_CONFIG=/usr/lib/llvm-8/bin/llvm-config

#informations sur la clé hôte connues_Décrit dans les hôtes
#référence: https://gist.github.com/gregdeane/56a7499fddac7251f01dcc9bb64e8486
RUN mkdir -p -m 0600 ~/.ssh \
  && ssh-keyscan github.com >> ~/.ssh/known_hosts

#Installation de Pipenv
RUN pip3 --no-cache-dir install pipenv

#Créez un répertoire avec le nom du référentiel que vous souhaitez développer.
RUN mkdir {repo-name}

Cette fois, nous supposons que nous développerons un référentiel privé sur GitHub, donc nous ne clonerons pas le référentiel ni n'installerons les dépendances dans le Dockerfile. Le côté Docker-compose ne prend pas encore en charge --ssh default, donc installez-le par une autre méthode. Si vous développez dans un référentiel public, vous devez également faire git clone ou pipenv install --dev dans votre Dockerfile.

Créer un Pipfile

Tout en ajoutant les bibliothèques nécessaires à l'environnement d'exécution, listez les outils requis pour l'environnement de développement sous [dev-packages]. Par exemple

Pipfile


[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
Cython = "*"
joblib = "*"
numpy = "*"
scipy = "*"
scikit-learn = "*"
lightgbm = "*"

[dev-packages]
nose = "*"
coverage ="*"
flake8 = "*"
isort = "*"
Sphinx = "*"
sphinx-autodoc-typehints = "*"
autopep8 = "*"
setuptools = "*"
mypy = "*"

[requires]
python_version = "3.8"

C'est comme ça. Tout d'abord, faisons en fait docker run basé sur le Dockerfile ci-dessus et vérifions si ce Pipfile fonctionne correctement.

Introduction du développement à distance

Installation basée sur Turorial of Remote Development. Il peut être facilement installé à partir de l'interface graphique VS Code ci-dessous. image.png

C'est facile.

Décrit comment construire pour l'environnement d'exploitation dans docker-compose.yml

Créez un docker-compose.yml qui construit le Dockerfile ci-dessus. Pour les fichiers Docker qui nécessitent que vous spécifiiez build-arg, définissez-le ici. L'exemple le plus simple est

docker-compose.yml


version: "3.7"
services:
  dev:
    build:
      context: .
      dockerfile: Dockerfile

Est-ce une forme comme?

Les paramètres spécifiques au développement à distance sont décrits dans docker-compose.extend.yml

C'est la production d'ici. Créez un docker-compose.extend.yml qui se compose uniquement des paramètres requis pour le développement à distance. En passant deux fichiers yaml dans .devcontainer.json créés dans la section suivante, la construction se fera avec les paramètres auxquels chaque paramètre est appliqué dans l'ordre. Par exemple

yaml:docker-compose.extend.yml


version: "3.7"
services:
  dev:
    volumes:
      - ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro
    command: sleep infinity

Faites comme ça.

Dans l'élément volumes, la clé publique locale est montée sur l'image Docker utilisée dans le développement à distance. Par conséquent, vous devez enregistrer la clé publique de votre machine locale dans GitHub. Voir ici pour plus de détails sur la façon de procéder. Encore une fois, c'est un élément inutile car aucune authentification n'est requise lors du développement avec un référentiel public.

De plus, «commande» est requise cette fois. Sans cela, le développement à distance ne ferait que construire et mourir ...

Décrivez les paramètres requis dans .devcontainer.json

C'est un autre souffle quand tu viens ici. C'est un fichier qui spécifie comment créer le Dockerfile créé ci-dessus. Voici un exemple et le rôle de chaque paramètre dans les commentaires.

json:.devcontainer.json


{
    #Devenez le nom de Workspace.
	"name": "{repo-name} DevEnv",

    #Répertoire racine utilisé pour spécifier l'emplacement du fichier de configuration.
	"context": ".",

    # docker-Liste des chemins vers yml utilisés dans la composition.Ordre strict.
	"dockerComposeFile": [
		"../docker-compose.yml",
		"docker-compose.extend.yml"
	],

    #Un docker avec des paramètres de construction pour l'environnement de développement-compse.nom du service sur yml.
	"service": "dev",
	"shutdownAction": "stopCompose",

    #Répertoire racine pour être un projet VS Code.
	"workspaceFolder": "/root/{repo-name}",

    #Commande à exécuter lorsque la construction de Docker est terminée.Clonez et installez le référentiel ici.
	"postCreateCommand": "git clone -b {branch name} {GitHub url} . && pipenv install --dev",

    #Paramètres à appliquer au nouveau VS Code lancé par Remote Development.
	"settings": {
		"autoDocstring.docstringFormat": "sphinx",
		"autoDocstring.guessTypes": false,
		"editor.formatOnSave": true,
		"editor.suggestSelection": "first",
		"git.autofetch": true,
		"git.confirmSync": false,
		"kite.showWelcomeNotificationOnStartup": false,
		"python.formatting.autopep8Args": [
			"--max-line-length=200"
		],
		"python.linting.pylintEnabled": false,
		"python.linting.flake8Args": [
			"--max-line-length=200"
		],
		"python.linting.flake8Enabled": true,
		"python.linting.mypyEnabled": true,
		"python.jediEnabled": false,
		"terminal.integrated.inheritEnv": false,
		"vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue"
	},

    #Si vous enregistrez l'ID de l'extension que vous souhaitez utiliser dans l'environnement distant, il sera installé automatiquement lors de la création de l'environnement..
	"extensions": [
		"ms-python.python",
		"njpwerner.autodocstring",
		"ms-azuretools.vscode-docker",
		"visualstudioexptteam.vscodeintellicode"
	]
}

Pour compléter l'extension,

njpwerner.autodocstring Un outil qui génère automatiquement des docstrings pour les fonctions et les classes en Python. Je veux générer automatiquement du HTML pour les documents avec Sphinx, donc " autoDocstring .docstringFormat ":" sphinx " définit également le style de la docstring.

visualstudioexptteam.vscodeintellicode Un outil super utile qui fait une complétion très puissante pour Python. "" Python.jediEnabled ": false` est un paramètre obligatoire.

python.linting Je pense que c'est un péché de ne pas mentionner l'indication de type dans la série Python3, donc "" python.linting.mypyEnabled ": true est requis, et il est difficile de lire que max-line-length est la valeur par défaut sur le moniteur actuel. Puisqu'il n'y a aucune aide pour cela, "" --max-line-length = 200 "" est spécifié pour chacun de ʻautopep8 et flake8. Le linter par défaut pour Python dans VSCode est pylint, mais quand je l'ai utilisé, j'avais beaucoup de dépendance autour de l'importation, donc [flake8](http :: //flake8.pycqa.org/en/latest/) est utilisé.

C'est comme ça.

Tapez une commande avec VS Code et construisez !!

(Pour Ubuntu) Ouvrez la fenêtre de commande avec Ctrl + Shift + p sur VSCode et appuyez sur ʻOpen Folder in Container ... `comme indiqué ci-dessous.

image.png

Si vous spécifiez le répertoire dans lequel se trouve le Dockerfile local, la compilation démarre automatiquement et VSCode qui s'exécute sur l'environnement construit sur le Docker Container sera nouvellement lancé. La première fois, la construction de docker et de pipenv prend du temps, alors attendez patiemment.

Enfin, l'interpréteur de Python peut ne pas reconnaître l'environnement pipenv, mais exécuter reload window à partir de la fenêtre de commande le corrigera.

Ceci complète l'environnement de développement! Je vous remercie pour votre travail acharné! !!

Recommended Posts

Créez un environnement de développement confortable avec VSCode x Remote Development x Pipenv
Créez un environnement de développement Go avec les conteneurs distants de VS Code
Créer un environnement de développement de langage C avec un conteneur
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de développement Django à l'aide de Doker Toolbox
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créez un environnement de développement avec Poetry Django Docker Pycharm
Ssh dans un environnement virtuel avec vscode Remote Development
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Créer un environnement python avec pyenv (OS X El Capitan 10.11.3)
Créer un environnement d'exécution Windows Python avec VScode + Remote WSL
Créez un environnement d'expérimentation / d'analyse psychologique confortable avec PsychoPy + Jupyter Notebook
[DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Créez un environnement d'API rapide avec docker-compose
[Linux] Créer un environnement Jenkins avec Docker
Créez un environnement virtuel pour python avec pyenv
Créez un environnement Python moderne avec Neovim
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Créez un environnement WardPress sur AWS avec Pulumi
Créer un environnement de développement Python avec Visual Studio Code
Créez un environnement python avec ansible sur centos6
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Créer un environnement de construction python3 avec Sublime Text3
Créez un environnement Django avec Vagrant en 5 minutes
Créez un environnement de développement Python sur votre Mac
Créez un environnement virtuel avec pyenv et venv
Créer un environnement Kubernetes pour le développement sur Ubuntu
Construire un environnement Python avec OSX Elcapitan
Créez un environnement de développement de plugins Minecraft avec Eclipse
Créez rapidement un environnement Python Django avec IntelliJ
Créer un environnement de développement mruby pour ESP32 (édition Linux)
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Construire un environnement de développement Python sur Raspberry Pi
Créer un environnement d'exécution python avec VS Code
Obtenez un environnement de développement Python rapide avec Poetry
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Créer un environnement de développement TensorFlow sur Amazon EC2 avec une copie de commande
Créez un environnement de développement local avec WSL + Docker Desktop pour Windows + docker-lambda + Python
Créer un environnement de développement Python basé sur GVim sur Windows 10 (3) GVim8.0 et Python3.6
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez un environnement de développement local pour Laravel6.X sur votre Mac
Réparer un environnement de développement cassé avec la migration des non-conformistes (Remarque)
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Créez un environnement de développement Python 3 (Anaconda) confortable avec Windows
Créez un environnement de développement python avec vagrant + ansible + fabric
Créer un environnement de développement Python basé sur GVim sur l'installation de Windows 10 (1)
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Construction de l'environnement de développement de plug-in QGIS3 Python avec VSCode (macOS)
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
Créer un environnement de développement Python à l'aide de pyenv sur MacOS
Environnement de développement Python avec Windows + Python + PipEnv + Visual Studio Code
Créer un environnement de développement Python avec OS X Lion