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.
Wir führen auch empfohlene Erweiterungen und Einstellungen für die Entwicklung von Python mit VS Code ein!
--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.
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!
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}
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.
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.
Installation basierend auf Turorial of Remote Development. Es kann einfach über die unten stehende VS-Code-GUI installiert werden.
Es ist einfach.
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?
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 ...
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.
(Für Ubuntu) Öffnen Sie das Befehlsfenster mit Strg + Umschalt + p auf VSCode und klicken Sie wie unten gezeigt auf "Ordner in Container öffnen ...".
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! !!