Haben Sie jemals mit Code oder Systemtools in Linux experimentiert, ohne sich um das Grundsystem zu sorgen und alles im Falle eines Fehlers, der mit Root-Rechten ausgefĂŒhrt werden sollte, zu ruinieren?
Wie sieht es aus, wenn man beispielsweise einen ganzen Cluster von verschiedenen Mikrodiensten auf einer Maschine testen oder starten muss? Hundert oder sogar tausend?
Mit virtuellen Maschinen können solche Aufgaben, die von einem Hypervisor verwaltet werden, möglicherweise gelöst werden, aber zu welchem Preis? Ein Beispiel: Ein Container in LXD auf der Basis der Alpine Linux-Distribution verbraucht minimal nur 7.60MB RAM, und wo das Root-Verzeichnis nach dem Start nur 9.5MB! Was hĂ€ltst du davon, Elon Musk? Ich empfehle, sich mit den Basisfunktionen von LXD â einem Containermanagement-System in Linux, vertraut zu machen.
Nachdem wir insgesamt klargestellt haben, was LXD-Container sind, lass uns weiterdenken und herausfinden, was wĂ€re, wenn es eine Plattform-Kombination gĂ€be, auf der man sicher Code fĂŒr den Host ausfĂŒhren, Diagramme generieren, UI-Widgets dynamisch (interaktiv) mit deinem Code verknĂŒpfen könnte, und den Code mit Text, mit Blackjack... und Formatierung ergĂ€nzen? Etwas wie ein interaktiver Blog? Wow... Ich will! Ich will! đ
Schau dir den Abschnitt unten an, wo wir in einem Container JupyterLab â der nĂ€chsten Generation der BenutzeroberflĂ€che anstelle des veralteten Jupyter Notebooks â starten und Module wie NumPy, Pandas, Matplotlib, IPyWidgets installieren, die alles oben Genannte ermöglichen und das alles in einer speziellen Datei â einem IPython-Notebook â speichern.

Navigation
- Startplan fĂŒr den Orbit
- Installation und Konfiguration des Basissystems
- Installation der Basissoftware und Systemkonfiguration
- Installation und Konfiguration von JupyterLab
- Daten mit dem Host teilen
- Hallo, Welt!
- Die Möglichkeiten von Python erweitern
- Module in JupyterLab testen
- Was ist noch?
Startplan fĂŒr den Orbit ^

Lass uns einen kurzen Plan erstellen, damit wir das oben genannte Schema einfacher umsetzen können:
- Wir werden einen Container auf Basis der Distribution installieren Alpine Linux. Wir werden diese Distribution verwenden, da sie auf Minimaleffizienz ausgerichtet ist und wir nur die notwendigste Software installieren werden, nichts ĂberflĂŒssiges.
- Wir fĂŒgen dem Container eine zusĂ€tzliche virtuelle Festplatte hinzu, die wir benennen werden â
hostfsund wir montieren es an das Root-Dateisystem. Diese Festplatte ermöglicht es, Dateien auf dem Host aus dem angegebenen Verzeichnis innerhalb des Containers zu nutzen. Somit sind die Daten unabhĂ€ngig vom Container. Im Falle der Löschung des Containers bleiben die Daten auf dem Host erhalten. AuĂerdem ist dieses Schema nĂŒtzlich, um bestimmte Daten zwischen vielen Containern zu teilen, ohne die standardmĂ€Ăigen Netzwerkmöglichkeiten des Container-Distributionssystems zu verwenden. - Wir installieren Bash, sudo, die erforderlichen Bibliotheken und fĂŒgen den Systembenutzer hinzu und konfigurieren ihn.
- Wir installieren Python, die Module und kompilieren die BinĂ€rabhĂ€ngigkeiten dafĂŒr.
- Wir installieren und starten. JupyterLab, gestalten das Aussehen und installieren Erweiterungen dafĂŒr.
In diesem Artikel werden wir mit dem Starten des Containers beginnen und die Installation und Konfiguration von LXD nicht betrachten; all dies finden Sie in einem anderen Artikel â Grundlegende Funktionen von LXD â dem Container-System in Linux.
Installation und Konfiguration des Basissystems ^
Wir erstellen den Container mit dem Befehl, in dem wir das Abbild angeben â alpine3, die Identifikation fĂŒr den Container â jupyterlab und bei Bedarf die Konfigurationsprofile:
lxc init alpine3 jupyterlab --profile=default --profile=hddrootHier verwende ich ein Konfigurationsprofil, hddroot das angibt, dass der Container mit einer Root-Partition in Storage Pool auf einer physischen HDD verfĂŒgbar gemacht wird:
lxc profile show hddroot
config: {}
beschreibung: ""
gerÀte:
root:
pfad: \
pool: hddpool
typ: disk
name: hddroot
used_by: []lxc storage show hddpool
config:
size: 10GB
source: /dev/loop1
volatile.initial_source: /dev/loop1
description: ""
name: hddpool
driver: btrfs
used_by:
- /1.0/images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
- /1.0/profiles/hddroot
status: Created
locations:
- noneDas gibt mir die Möglichkeit, mit Containern auf der HDD zu experimentieren und die Ressourcen der SSD zu schonen, die ebenfalls in meinem System vorhanden ist đ, fĂŒr die ich ein separates Konfigurationsprofil erstellt habe. ssdroot.
Nach der Erstellung des Containers befindet er sich im Zustand STOPPED, daher mĂŒssen wir ihn starten, indem wir das Init-System darin ausfĂŒhren:
lxc start jupyterlabWir zeigen die Liste der Container in LXD an, indem wir den Parameter verwenden, -c der angibt, welche cSpalten auf dem Bildschirm angezeigt werden sollen:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+Beim Erstellen des Containers wurde die IP-Adresse zufĂ€llig ausgewĂ€hlt, da wir ein Konfigurationsprofil verwendet haben, default das zuvor in dem Artikel konfiguriert wurde, Grundlegende Funktionen von LXD â dem Container-System in Linux.
Wir werden diese IP-Adresse durch eine einprĂ€gsamere ersetzen, indem wir ein Netzwerk-Interface auf Container-Ebene und nicht auf Profil-Ebene wie in der aktuellen Konfiguration erstellen. Dies ist nicht zwingend erforderlich, Sie können dies ĂŒberspringen.
Wir erstellen ein Netzwerkinterface eth0 das wir mit dem Switch (NetzwerkbrĂŒcke) verbinden lxdbr0 in dem wir NAT gemÀà dem vorherigen Artikel eingeschaltet haben, wird der Container jetzt Zugang zum Internet haben, und auĂerdem weisen wir dem Interface eine statische IP-Adresse zu â 10.0.5.5:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5Nach dem HinzufĂŒgen des GerĂ€ts muss der Container neu gestartet werden:
lxc restart jupyterlabĂberprĂŒfen wir den Status des Containers:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+Installation der Basissoftware und Systemkonfiguration ^
FĂŒr die Verwaltung unseres Containers mĂŒssen wir folgende Software installieren:
Package
Beschreibung
bash
Die GNU Bourne Again Shell
bash-completion
Programmierte VervollstĂ€ndigung fĂŒr die Bash-Shell
sudo
Bestimmten Benutzern erlauben, einige Befehle als Root auszufĂŒhren
shadow
Passwort- und Kontenverwaltungssuite mit UnterstĂŒtzung fĂŒr Schatten-Dateien und PAM
tzdata
Quellen fĂŒr Zeitzonen- und Sommerzeitdaten
Viele haben darauf gewartet und viele haben sich dagegen ausgesprochen, aber es ist passiert: der standardmĂ€Ăige Konsolen-Texteditor in Fedora Workstation wird nano.
Pico-Editor-Klon mit Verbesserungen
ZusĂ€tzlich können Sie die UnterstĂŒtzung fĂŒr Man-Seiten installieren, indem Sie folgende Pakete installieren â man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nanoLassen Sie uns die Befehle und Optionen, die wir verwendet haben, durchgehen:
lxcâ Aufruf des LXD-Clientsexecâ Methode des LXD-Clients, die einen Befehl im Container ausfĂŒhrtjupyterlabâ Container-ID--â Besondere Option, die angibt, dass die SchlĂŒssel nicht weiter als SchlĂŒssel interpretiert werden sollenlxcund den gesamten verbleibenden String so, wie er ist, an den Container ĂŒbergebenapkâ Paketmanager der Alpine Linux-Distributionaddâ Methode des Paketmanagers, die die nach dem Befehl angegebenen Pakete installiert
Dann installieren wir die Zeitzone im System Europe/Moscow:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtimeNachdem die Zeitzone installiert wurde, wird das Paket tzdata im System nicht mehr benötigt, es wĂŒrde Platz beanspruchen, also entfernen wir es:
lxc exec jupyterlab -- apk del tzdataĂberprĂŒfen wir die Zeitzone:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020Um nicht viel Zeit mit der Konfiguration von Bash fĂŒr neue Benutzer im Container zu verschwenden, werden wir in den nĂ€chsten Schritten die bereits fertigen Skel-Dateien aus dem Host-System hinein kopieren. Das wird es ermöglichen, die Bash im Container interaktiv zu gestalten. Mein Host-System ist Manjaro Linux und die kopierten Dateien /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors passen grundsĂ€tzlich zu Alpine Linux und verursachen keine kritischen Probleme, aber vielleicht haben Sie eine andere Distribution und mĂŒssen selbst herausfinden, wie Sie bei Problemen mit dem gestarteten Bash im Container vorgehen.
Wir kopieren die Skel-Dateien in den Container. Der SchlĂŒssel --create-dirs erstellt die notwendigen Verzeichnisse, falls diese nicht vorhanden sind:
lxc file push /etc/skel/.bash_profile jupyterlab/etc/skel/.bash_profile --create-dirs
lxc file push /etc/skel/.bashrc jupyterlab/etc/skel/.bashrc
lxc file push /etc/skel/.dir_colors jupyterlab/etc/skel/.dir_colorsFĂŒr den bereits existierenden root-Benutzer kopieren wir die gerade in den Container kopierten skel-Dateien in das Home-Verzeichnis:
lxc exec jupyterlab -- cp /etc/skel/.bash_profile /root/.bash_profile
lxc exec jupyterlab -- cp /etc/skel/.bashrc /root/.bashrc
lxc exec jupyterlab -- cp /etc/skel/.dir_colors /root/.dir_colorsIn Alpine Linux wird fĂŒr Benutzer die System-Shell eingestellt /bin/sh, wir Ă€ndern sie bei root dem Benutzer auf Bash:
lxc exec jupyterlab -- usermod --shell=/bin/bash rootUm root der Benutzer hatte kein Passwort, er muss ein Passwort setzen. Der folgende Befehl generiert und setzt ein neues zufĂ€lliges Passwort, das Sie nach der AusfĂŒhrung im Konsolenbildschirm sehen werden:
lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "root:$PASSWD" | chpasswd && echo "Neues Passwort: $PASSWD""
Neues Passwort: sFiXEvBswuWAAuĂerdem erstellen wir einen neuen Systembenutzer â jupyter fĂŒr den wir spĂ€ter konfigurieren werden, JupyterLab:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyterWir generieren und setzen ein Passwort fĂŒr ihn:
lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "jupyter:$PASSWD" | chpasswd && echo "Neues Passwort: $PASSWD""
Neues Passwort: ZIcbzWrF8tkiAnschlieĂend fĂŒhren wir zwei Befehle aus, der erste erstellt die Systemgruppe sudo, und der zweite fĂŒgt den Benutzer hinzu jupyter:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyterSehen wir uns an, in welche Gruppen der Benutzer gehört jupyter:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudoAlles â in Ordnung, wir machen weiter.
Erlauben wir allen Benutzern, die in der Gruppe sind, sudo den Befehl zu verwenden sudo. Dazu fĂŒhren Sie das folgende Skript aus, das sed die Zeile des Parameters in der Konfigurationsdatei auskommentiert. /etc/sudoers:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"Installation und Konfiguration von JupyterLab ^
JupyterLab â dies ist eine Python-Anwendung, daher mĂŒssen wir diesen Interpreter vorher installieren. AuĂerdem, JupyterLab werden wir dies mit dem Python-Paketmanager installieren pip, und nicht mit dem Systempaketmanager, da er im System-Repository veraltet sein kann, und daher mĂŒssen wir manuell die AbhĂ€ngigkeiten fĂŒr ihn installieren, indem wir die folgenden Pakete installieren â python3 python3-dev gcc libc-dev zeromq-dev:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-devWir aktualisieren die Python-Module und den Paketmanager pip auf die aktuelle Version:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheelInstallation JupyterLab ĂŒber den Paketmanager pip:
lxc exec jupyterlab -- python3 -m pip install jupyterlabDa die Erweiterungen in JupyterLab sind experimentell und werden offiziell nicht mit dem jupyterlab-Paket geliefert, daher mĂŒssen wir dies manuell installieren und konfigurieren.
Wir werden NodeJS und den Paketmanager dafĂŒr â NPM installieren, da JupyterLab sie fĂŒr ihre Erweiterungen verwendet:
lxc exec jupyterlab -- apk add nodejs npmDamit die Erweiterungen fĂŒr JupyterLab die wir installieren, funktionieren, mĂŒssen sie im Benutzerverzeichnis installiert werden, da die Anwendung als Benutzer ausgefĂŒhrt wird jupyter. Das Problem ist, dass es keinen Parameter im Startbefehl gibt, mit dem wir das Verzeichnis ĂŒbergeben können, die Anwendung erkennt nur die Umgebungsvariable, und deshalb mĂŒssen wir diese festlegen. Dazu werden wir den Befehl zur Exportierung der Variable JUPYTERLAB_DIR in der Benutzerumgebung jupyter, in die Datei .bashrc, die bei jedem Login des Benutzers ausgefĂŒhrt wird:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"Mit dem nĂ€chsten Befehl installieren wir eine spezielle Erweiterung â den Erweiterungsmanager in JupyterLab:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"Jetzt ist alles bereit fĂŒr den ersten Start JupyterLab, aber wir können noch einige nĂŒtzliche Erweiterungen installieren:
tocâ Inhaltsverzeichnis, generiert eine Liste von Ăberschriften im Artikel/Notebookjupyterlab-horizon-themeâ UI-Themejupyterlab_neon_themeâ UI-Themejupyterlab-ubu-themeâ Ein weiteres Theme vom Autor dieses Artikels đ Aber in diesem Fall wird die Installation aus dem GitHub-Repository gezeigt.
FĂŒhren Sie also nacheinander die folgenden Befehle aus, um diese Erweiterungen zu installieren:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyterlab/toc @mohirio/jupyterlab-horizon-theme @yeebc/jupyterlab_neon_theme"lxc exec jupyterlab -- su -l jupyter -c "wget -c https://github.com/microcoder/jupyterlab-ubu-theme/archive/master.zip"lxc exec jupyterlab -- su -l jupyter -c "unzip -q master.zip && rm master.zip"lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build jupyterlab-ubu-theme-master"lxc exec jupyterlab -- su -l jupyter -c "rm -r jupyterlab-ubu-theme-master"Nach der Installation der Erweiterungen mĂŒssen wir sie kompilieren, da wir zuvor beim Installieren den SchlĂŒssel --no-build zum Zeit sparen verwendet haben. Jetzt werden wir sie wesentlich schneller zusammen kompilieren:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"FĂŒhren Sie jetzt die folgenden zwei Befehle fĂŒr den ersten Start aus. JupyterLab. Man könnte ihn mit einem einzigen Befehl starten, aber in diesem Fall wĂŒrde der Startbefehl, den man im Kopf behalten muss, von bash im Container gespeichert und nicht auf dem Host, wo es ohnehin genĂŒgend Befehle gibt, um sie in der Geschichte zu speichern đ
Melden Sie sich im Container als Benutzer an jupyter:
lxc exec jupyterlab -- su -l jupyterFĂŒhren Sie dann aus JupyterLab mit den Keys und Parametern wie angegeben:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browserGehen Sie im Webbrowser zu der Adresse http://10.0.5.5:8888 und geben Sie auf der sich öffnenden Seite ein token Zugriff, den Sie in der Konsole sehen werden. Kopieren Sie ihn und fĂŒgen Sie ihn auf der Seite ein, und drĂŒcken Sie dann Anmelden. Nach dem Einloggen gehen Sie links im MenĂŒ der Erweiterungen, wie im Bild unten gezeigt, wo Ihnen bei der Aktivierung des Erweiterungsmanagers Sicherheitsrisiken auferlegt werden, wenn Sie Erweiterungen von Drittanbietern installieren, fĂŒr die das Team JupyterLab-Entwicklung keine Verantwortung ĂŒbernimmt:

Wir isolieren es gerade dafĂŒr vollstĂ€ndig JupyterLab und setzen es in einen Container, damit Drittanbietererweiterungen, die NodeJS benötigen und verwenden, zumindest keine Daten auf der Festplatte stehlen können, auĂer denjenigen, die wir innerhalb des Containers öffnen. Es ist unwahrscheinlich, dass Prozesse aus dem Container auf Ihre privaten Dokumente auf dem Host zugreifen können, und wenn doch, benötigt man dafĂŒr Berechtigungen fĂŒr die Dateien im Host-System, da wir den Container in /home nicht privilegiertem Modus . Basierend auf diesen Informationen können Sie das Risiko der Aktivierung von Erweiterungen inDie erstellten IPython-NotizbĂŒcher (Seiten in JupyterLab.
) werden jetzt im Heimatverzeichnis des Benutzers erstellt â JupyterLab, aber wir planen, die Daten zwischen Host und Container zu teilen, also kehren Sie zur Konsole zurĂŒck und stoppen Sie /home/jupyterindem Sie die Hotkey-Taste â JupyterLab und auf die Anfrage antworten. Trennen Sie dann die interaktive Benutzersitzung CTRL+C indem Sie die Hotkey-Taste ausfĂŒhren y Um Daten mit dem Host zu teilen, mĂŒssen Sie im Container ein GerĂ€t erstellen, das dies ermöglicht, und fĂŒhren Sie dazu den folgenden Befehl aus, bei dem wir die folgenden SchlĂŒssel angeben: jupyter lxc config device add CTRL+D.
Daten mit dem Host teilen ^
â Befehl fĂŒgt die GerĂ€tekonfiguration hinzu
â Die ID des Containers, in den die Konfiguration hinzugefĂŒgt wirdâ Die ID des GerĂ€ts. Sie können einen beliebigen Namen wĂ€hlen.jupyterâ Der Typ des GerĂ€ts wird angegebenhostfsâ Der Pfad im Container, zu dem LXD dieses GerĂ€t mounten wirddiskâ Der Pfad im Container, zu dem LXD dieses GerĂ€t mounten wirdpathâ Der Pfad im Container, zu dem LXD dieses GerĂ€t mounten wirdsourceâ Die Quelle, der Pfad zum Verzeichnis auf dem Host, das Sie mit dem Container teilen möchten, wird angegeben. Geben Sie den Pfad nach Ihren WĂŒnschen an.
lxc config device add jupyterlab hostfs disk path=\/mnt\/hostfs source=\/home\/dv\/projects\/ipython-notebooksFĂŒr das Verzeichnis /home/dv/projects/ipython-notebooks muss die Berechtigung fĂŒr den Containerbenutzer, der derzeit die UID gleich hat, eingestellt werden. SubUID + UID, siehe Kapitel Sicherheit. Berechtigungen von Containern in dem Artikel Grundlegende Funktionen von LXD â dem Container-System in Linux.
Die Berechtigung auf dem Host wird gesetzt, wobei der Containerbenutzer der EigentĂŒmer ist. jupyter, und die Variable $USER zeigt Ihren Hostbenutzer als Gruppe an:
sudo chown 1001000:$USER \/home\/dv\/projects\/ipython-notebooksHallo, Welt! ^
Wenn Sie noch eine Konsolensitzung im Container mit JupyterLab, haben, starten Sie sie mit dem neuen SchlĂŒssel neu. --notebook-dir unter Festlegung des Wertes /mnt/hostfs als Pfad zum Stamm der Notebooks im Container fĂŒr das GerĂ€t, das wir im vorherigen Schritt erstellt haben:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=\/mnt\/hostfsGehen Sie dann zur Seite http://10.0.5.5:8888 und erstellen Sie Ihr erstes Notebook, indem Sie auf den Button auf der Seite klicken, wie im Bild unten angegeben:

Geben Sie dann im Feld auf der Seite den Python-Code ein, der die klassische 4) Wechseln Sie in das Verzeichnis, in das Sie das Beispielprojekt heruntergeladen haben:. Nach der Eingabe drĂŒcken Sie CTRL+ENTER oder die âPlayâ-Taste in der oberen Symbolleiste, damit JupyterLab dies ausfĂŒhrt:

Fast alles ist bereit zur Benutzung, aber es wĂ€re nicht interessant, wenn wir nicht zusĂ€tzliche Python-Module (vollwertige Anwendungen) installieren, die die Standardfunktionen von Python erheblich erweitern in JupyterLab, also machen wir weiter đ
P.S. Interessant ist, dass die alte Implementierung Jupyter unter dem Codenamen Jupyter Notebook nicht verschwunden ist und parallel zu JupyterLabexistiert. Um zur alten Version zu wechseln, folgen Sie dem Link und fĂŒgen Sie am Ende der Adresse das Suffix hinzu./tree, wĂ€hrend der Zugang zur neuen Version mit dem Suffix erfolgt /lab, aber es ist nicht zwingend erforderlich, es anzugeben:
- Jupyter Notebook â http://10.0.5.5:8888/tree
- Jupyter Lab â http://10.0.5.5:8888/lab
Die Möglichkeiten von Python erweitern ^
In diesem Abschnitt installieren wir leistungsstarke Python-Module wie NumPy, Pandas, Matplotlib, IPyWidgets deren Arbeitsergebnisse in die Notebooks integriert werden. JupyterLab.
Bevor wir die aufgefĂŒhrten Python-Module ĂŒber den Paketmanager installieren, pip mĂŒssen wir zuerst systemabhĂ€ngige Anforderungen in Alpine Linux zulassen:
g++â Wird fĂŒr die Kompilierung von Modulen benötigt, da einige von ihnen in der Sprache C++ implementiert sind und zur Laufzeit als BinĂ€rmodule mit Python verbunden werden.freetype-devâ AbhĂ€ngigkeit fĂŒr das Python-Modul Matplotlib
AbhÀngigkeiten installieren:
lxc exec jupyterlab -- apk add g++ freetype-devEs gibt ein Problem: In der aktuellen Version des Alpine Linux-Distributions kann ich eine neue Version von NumPy nicht kompilieren, da ein Kompilierungsfehler auftritt, den ich nicht beheben konnte:
FEHLER: Konnte keine RĂ€der fĂŒr numpy erstellen, die PEP 517 verwenden und nicht direkt installiert werden können
Deshalb werden wir dieses Modul als Systempaket installieren, das eine bereits kompilierte, aber etwas Ă€ltere Version bereitstellt als die derzeit auf der Website verfĂŒgbare:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-devDanach installieren wir die Python-Module ĂŒber den Paketmanager pip. Haben Sie Geduld, da einige Module kompiliert werden und dies mehrere Minuten in Anspruch nehmen kann. Auf meinem GerĂ€t dauerte die Kompilierung ca. 15 Minuten:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlibWir leeren die Installations-Caches:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*Module in JupyterLab testen ^
Wenn Sie JupyterLabausgefĂŒhrt haben, starten Sie es neu, damit die neu installierten Module aktiviert werden. DrĂŒcken Sie dazu in der Konsolensitzung CTRL+C wo es laufend ist, und geben Sie ein y bei der Abfrage zum Stoppen, und starten Sie dann wieder JupyterLab indem Sie die AufwĂ€rtstaste auf der Tastatur drĂŒcken, um den Befehl nicht erneut eingeben zu mĂŒssen, und dann Enter um zu starten:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=\/mnt\/hostfsGehen Sie zur Seite http://10.0.5.5:8888/lab oder aktualisieren Sie die Seite im Browser, und geben Sie dann den folgenden Code in eine neue Notebook-Zelle ein:
%matplotlib inline
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np
def f(m, b):
plt.figure(2)
x = np.linspace(-10, 10, num=1000)
plt.plot(x, m * x + b)
plt.ylim(-5, 5)
plt.show()
interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5))
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plotSie sollten ein Ergebnis wie im Bild unten erhalten, wo IPyWidgets ein UI-Element auf der Seite erzeugt, das interaktiv mit dem Quellcode interagiert, und auch Matplotlib das Ergebnis des Codes in Form eines Diagramms wie einer Funktion anzeigt:

Viele Beispiele IPyWidgets finden Sie in den Tutorials hier
Was ist noch? ^
Gut gemacht, wenn Sie geblieben sind und bis zum Ende des Artikels gekommen sind. Ich habe absichtlich kein fertiges Skript am Ende des Artikels bereitgestellt, das JupyterLab mit 'einem Klick' installiert, um die Arbeit zu belohnen đ Aber Sie können es selbst tun, da Sie bereits wissen, wie, indem Sie die Befehle in ein einzelnes Bash-Skript zusammenstellen đ
AuĂerdem können Sie:
- einen Netzwerknamen fĂŒr den Container anstelle der IP-Adresse angeben, indem Sie ihn einfach in die
/etc/hostseingeben und die Adresse im Browser eingeben http://jupyter.local:8888 - Mit der Ressourcenkontrolle fĂŒr den Container experimentieren, dazu lesen Sie das Kapitel ĂŒber die grundlegenden Funktionen von LXD oder erhalten Sie weitere Informationen auf der Website des Entwicklers von LXD.
- Das Design wechseln:

Und viel mehr können Sie! Das ist alles. Ich wĂŒnsche Ihnen viel Erfolg!
AKTUALISIERUNG: 15.04.2020 18:30 â Fehler im Kapitel âHallo, Welt!â behoben
AKTUALISIERUNG: 16.04.2020 10:00 â Text im Beschreibung zur Aktivierung des Erweiterungsmanagers angepasst und hinzugefĂŒgt JupyterLab
AKTUALISIERUNG: 16.04.2020 10:40 â Gefundene Fehler im Text korrigiert und das Kapitel âInstallation der Basissoftware und Systemkonfigurationâ etwas verbessert
Quelle: habr.com
