[PYTHON] Erstellen Sie mit VSCode x Remote Development x Pipenv eine komfortable Entwicklungsumgebung

Überblick

Verwalten Sie die Python-Ausführungsumgebung mit Docker und Pipenv und verwenden Sie sie als [VSCode] ](Https://code.visualstudio.com/) Remote Development führt den Mechanismus zum Umschalten ein. Nachrichten, dass Facebook für diese Funktion mit Microsoft zusammengearbeitet hat ist heutzutage eine heiße Funktion. Die Vorteile dieser Einführung sind:

--Docker: Abhängige Bibliotheken (LAPACK usw.) und Einstellungen für Umgebungsvariablen, die nicht von Pipenv verwaltet werden können, können ebenfalls verwaltet werden. --Pipenv: Pakete, die nur für die Entwicklung benötigt werden (autopep8 usw.), können getrennt von der Ausführungsumgebung verwaltet werden, und das Abhängigkeitsmanagement ist einfacher als pip. --VSCode: Kann nahtlos auf dem Docker-Container entwickelt werden, der mit den beiden oben genannten Komponenten erstellt wurde, und verschiedene Erweiterungen sind leistungsstark

Es gibt solche Dinge, daher finde ich es großartig, eine Entwicklungsumgebung zu schaffen, indem man diese kombiniert. Das Bild setzt sich wie folgt zusammen.

image.png

Wir führen auch empfohlene Erweiterungen und Einstellungen für die Entwicklung von Python mit VS Code ein!

Versionsinformation

Vorbereitung

--VSCode-Installation: Schnell von Download-Seite --Docker-Installation: Community-Version ist installiert und [Einstellungen ohne Root-Ausführung](https: // docs. docker.com/install/linux/linux-postinstall/)

Ich denke, dass es verschiedene Artikel gibt, die andere als die offiziellen ausführlich erläutern. Überprüfen Sie daher bitte jeden Artikel, wenn die oben genannten nicht ausreichen.

Umweltbauschritte

  1. Erstellen Sie eine Docker-Datei
  2. Erstellen Sie eine Pipfile
  3. Beschreiben Sie die Erstellungsmethode für die Ausführungsumgebung in docker-compose.yml
  4. Installieren Sie Remote Development-Erweiterungen
  5. Beschreiben Sie die spezifischen Einstellungen für die Remoteentwicklung in docker-compose.extend.yml
  6. Beschreiben Sie die erforderlichen Einstellungen in .devcontainer.json
  7. Geben Sie einen Befehl mit VS Code ein und erstellen Sie !!

Ich denke, dass diejenigen, die Produkte mit Docker oder Pipenv betreiben, bereits 1 bis 3 gemacht haben, also fahren Sie bitte mit 4 fort. Es ist noch ein langer Weg, aber wir werden unser Bestes geben, um eine komfortable Umgebung zu schaffen!

Wie erklärt man

Beschreiben Sie die Einstellungsdatei mit der folgenden Struktur. Ich werde die Rolle jeder Datei erklären und wie man sie in der richtigen Reihenfolge erstellt. Lesen Sie {Repo-Name} als Repository-Namen und {Tool-Name} als Stammverzeichnis des Entwicklungstools.

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

Erstellen einer Docker-Datei

Ich schäme mich zu sagen, dass ich mit Docker nicht so vertraut bin, daher denke ich, dass es viele Dinge zu tun gibt, aber zum Beispiel eine Umgebung in der folgenden Form erstellen.

Dockerfile


# Python 3.8 ist schlank-Buster scheint zu empfehlen
#Referenz: https://pythonspeed.com/articles/base-image-python-docker-images/
FROM python:3.8-slim-buster

#Umgebungsvariablen festlegen
ENV HOME /root
ENV TZ Asia/Tokyo
WORKDIR $HOME

#Installieren Sie verschiedene in Python verwendete Bibliotheken
# software-properties-common und wget sind für eine spätere Installation von clang 8 erforderlich
RUN set -ex \
  && apt-get update \
  && apt-get install -y g++ git openssh-client wget libblas-dev liblapack-dev gnupg software-properties-common make

#installiere clang 8
#Da numba von llvmlite abhängt, installieren Sie die clang 8-Serie zusammen
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-Registrieren Sie den Pfad zur Konfiguration
ENV LLVM_CONFIG=/usr/lib/llvm-8/bin/llvm-config

#Hostschlüsselinformationen bekannt_In Hosts beschrieben
#Referenz: https://gist.github.com/gregdeane/56a7499fddac7251f01dcc9bb64e8486
RUN mkdir -p -m 0600 ~/.ssh \
  && ssh-keyscan github.com >> ~/.ssh/known_hosts

#Pipenv installieren
RUN pip3 --no-cache-dir install pipenv

#Erstellen Sie ein Verzeichnis mit dem Namen des Repositorys, das Sie entwickeln möchten.
RUN mkdir {repo-name}

Dieses Mal gehen wir davon aus, dass wir ein privates Repository auf GitHub entwickeln werden, damit wir das Repository nicht klonen oder die Abhängigkeiten in der Docker-Datei installieren. Docker-Compose-Seite unterstützt --ssh default noch nicht, installieren Sie es also mit einer anderen Methode. Wenn Sie in einem öffentlichen Repository entwickeln, sollten Sie auch "git clone" oder "pipenv install --dev" in Ihrer Docker-Datei ausführen.

Pipfile erstellen

Listen Sie beim Hinzufügen der erforderlichen Bibliotheken zur Ausführungsumgebung die für die Entwicklungsumgebung erforderlichen Tools unter "[dev-packages]" auf. Zum Beispiel

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"

Es ist so. Lassen Sie uns zunächst einen Docker-Lauf basierend auf der obigen Docker-Datei durchführen und prüfen, ob diese Pip-Datei ordnungsgemäß funktioniert.

Einführung der Fernentwicklung

Installation basierend auf Turorial of Remote Development. Es kann einfach über die unten stehende VS-Code-GUI installiert werden. image.png

Es ist einfach.

Beschrieben, wie in docker-compose.yml für die Betriebsumgebung erstellt wird

Erstellen Sie eine docker-compose.yml, die die Docker-Datei oben erstellt. Stellen Sie Docker-Dateien, für die Sie "build-arg" angeben müssen, hier ein. Das einfachste Beispiel ist

docker-compose.yml


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

Ist es eine Form wie?

Spezifische Einstellungen für die Remoteentwicklung werden in docker-compose.extend.yml beschrieben

Es ist die Produktion von hier. Erstellen Sie eine "docker-compose.extend.yml", die nur aus den für die Remote-Entwicklung erforderlichen Einstellungen besteht. Durch Übergeben von zwei Yaml-Dateien in .devcontainer.json, die im nächsten Abschnitt erstellt wurden, wird der Build mit den Einstellungen durchgeführt, auf die jede Einstellung der Reihe nach angewendet wird. Zum Beispiel

yaml:docker-compose.extend.yml


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

Mach es so.

Im Element "Volumes" wird der lokale öffentliche Schlüssel auf dem Docker-Image bereitgestellt, das in der Remoteentwicklung verwendet wird. Daher müssen Sie den öffentlichen Schlüssel Ihres lokalen Computers in GitHub registrieren. Weitere Informationen hierzu finden Sie unter hier. Auch dies ist ein unnötiges Element, da bei der Entwicklung mit einem öffentlichen Repository keine Authentifizierung erforderlich ist.

Außerdem ist diesmal "Befehl" erforderlich. Ohne dies würde Remote Development einfach bauen und sterben ...

Beschreiben Sie die erforderlichen Einstellungen in .devcontainer.json

Es ist ein weiterer Atemzug, wenn Sie hierher kommen. Es ist eine Datei, die angibt, wie die oben erstellte Docker-Datei erstellt wird. Unten finden Sie ein Beispiel und die Rolle der einzelnen Parameter in den Kommentaren.

json:.devcontainer.json


{
    #Werden Sie zum Namen von Workspace.
	"name": "{repo-name} DevEnv",

    #Stammverzeichnis, in dem der Speicherort der Konfigurationsdatei angegeben wird.
	"context": ".",

    # docker-Liste der Pfade zu yml, die beim Verfassen verwendet werden.Strenge Reihenfolge.
	"dockerComposeFile": [
		"../docker-compose.yml",
		"docker-compose.extend.yml"
	],

    #Ein Docker mit Build-Einstellungen für die Entwicklungsumgebung-compse.Dienstname auf yml.
	"service": "dev",
	"shutdownAction": "stopCompose",

    #Stammverzeichnis als VS-Code-Projekt.
	"workspaceFolder": "/root/{repo-name}",

    #Befehl, der ausgeführt werden soll, wenn der Docker-Build abgeschlossen ist.Klonen und installieren Sie das Repository hier.
	"postCreateCommand": "git clone -b {branch name} {GitHub url} . && pipenv install --dev",

    #Einstellungen, die auf den neuen VS-Code angewendet werden sollen, der von Remote Development gestartet wird.
	"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"
	},

    #Wenn Sie die ID der Erweiterung registrieren, die Sie in der Remote-Umgebung verwenden möchten, wird sie beim Erstellen der Umgebung automatisch installiert..
	"extensions": [
		"ms-python.python",
		"njpwerner.autodocstring",
		"ms-azuretools.vscode-docker",
		"visualstudioexptteam.vscodeintellicode"
	]
}

Um die Erweiterung zu ergänzen,

njpwerner.autodocstring Ein Tool, das automatisch Dokumentzeichenfolgen für Funktionen und Klassen in Python generiert. Ich möchte automatisch HTML für Dokumente mit Sphinx generieren, also "autoDocstring" .docstringFormat ":" sphinx "` legt auch den Stil der Dokumentzeichenfolge fest.

visualstudioexptteam.vscodeintellicode Ein sehr nützliches Tool, das Python sehr leistungsfähig vervollständigt. " Python.jediEnabled ": false ist eine erforderliche Einstellung.

python.linting Ich denke, es ist eine Sünde, Type Hinting in der Python3-Serie nicht zu erwähnen, daher ist "python.linting.mypyEnabled": true "erforderlich, und es ist schwer zu lesen, dass die maximale Zeilenlänge die Standardeinstellung auf dem aktuellen Monitor ist. Da es keine Hilfe dafür gibt, wird "--max-line-length = 200" für jedes von "autopep8" und "flake8" angegeben. Der Python-Standard-Linter von VS Code ist pylint, aber als ich ihn verwendete, war ich sehr abhängig vom Import, also [flake8](http :: //flake8.pycqa.org/en/latest/) wird verwendet.

Es ist wie es ist.

Geben Sie einen Befehl mit VS Code ein und erstellen Sie !!

(Für Ubuntu) Öffnen Sie das Befehlsfenster mit Strg + Umschalt + p auf VSCode und klicken Sie wie unten gezeigt auf "Ordner in Container öffnen ...".

image.png

Wenn Sie das Verzeichnis angeben, in dem sich die lokale Docker-Datei befindet, wird die Erstellung automatisch gestartet und VSCode, der in der auf dem Docker-Container erstellten Umgebung ausgeführt wird, wird neu gestartet. Beim ersten Mal dauert es einige Zeit, bis Docker und Pipenv installiert sind. Warten Sie also bitte geduldig.

Schließlich erkennt Pythons Interpreter die pipenv-Umgebung möglicherweise nicht, aber wenn Sie "neu laden" im Befehlsfenster ausführen, wird dies behoben.

Dies vervollständigt die Entwicklungsumgebung! Danke für deine harte Arbeit! !!

Recommended Posts

Erstellen Sie mit VSCode x Remote Development x Pipenv eine komfortable Entwicklungsumgebung
Erstellen Sie eine Go-Entwicklungsumgebung mit den Remote-Containern von VS Code
Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit der Doker Toolbox eine Django-Entwicklungsumgebung
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
SSH in eine virtuelle Umgebung mit vscode Remote Development
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Erstellen Sie eine Python-Umgebung mit pyenv (OS X El Capitan 10.11.3).
Erstellen Sie eine Windows Python-Ausführungsumgebung mit VScode + Remote WSL
Erstellen Sie mit PsychoPy + Jupyter Notebook eine komfortable Umgebung für psychologische Experimente / Analysen
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Erstellen Sie mit Docker-Compose eine schnelle API-Umgebung
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
Erstellen Sie mit pyenv eine virtuelle Umgebung für Python
Erstellen Sie mit Neovim eine moderne Python-Umgebung
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Erstellen Sie mit pulumi eine WardPress-Umgebung auf AWS
Erstellen Sie eine Python-Entwicklungsumgebung mit Visual Studio Code
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
Starten Sie Django in einer virtuellen Umgebung mit Pipenv
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Erstellen Sie eine Python-Entwicklungsumgebung auf Ihrem Mac
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Erstellen Sie eine Kubernetes-Umgebung für die Entwicklung unter Ubuntu
Erstellen einer Python-Umgebung mit OSX Elcapitan
Erstellen Sie mit Eclipse eine Minecraft-Plug-Entwicklungsumgebung
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
Erstellen Sie eine mruby-Entwicklungsumgebung für ESP32 (Linux Edition)
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Holen Sie sich mit Poetry eine schnelle Python-Entwicklungsumgebung
Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code
Erstellen Sie eine TensorFlow-Entwicklungsumgebung auf Amazon EC2 mit Befehlskopie
Erstellen Sie eine lokale Entwicklungsumgebung mit WSL + Docker Desktop für Windows + Docker-Lambda + Python
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (3) GVim8.0 und Python3.6
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Reparieren einer kaputten Entwicklungsumgebung mit Mavericks-Migration (Hinweis)
Erstellen Sie mit pyenv-virtualenv eine Python-Umgebung für jedes Verzeichnis
Erstellen Sie eine komfortable Python 3 (Anaconda) -Entwicklungsumgebung mit Windows
Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (1)
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Aufbau einer QGIS3 Python-Plug-In-Entwicklungsumgebung mit VSCode (macOS)
So erstellen Sie eine Entwicklungsumgebung für TensorFlow (1.0.0) (Mac)
Erstellen Sie eine Python-Entwicklungsumgebung mit pyenv unter MacOS
Python-Entwicklungsumgebung mit Windows + Python + PipEnv + Visual Studio-Code
Erstellen Sie eine Python-Entwicklungsumgebung mit OS X Lion