Lanciamentu di Jupyter in orbita LXD

Avete mai avutu à sperimentà cù u codice o l'utilità di u sistema in Linux per ùn preoccupà micca u sistema di basa è ùn sguassate micca tuttu in casu d'errore in u codice chì deve esse currettu cù privilegi di root?

Ma chì dici di u fattu chì dicemu chì avete bisognu di pruvà o eseguisce un cluster sanu di varii microservizi nantu à una macchina? Centu o ancu mille ?

Cù macchine virtuali gestite da un ipervisore, tali prublemi ponu è seranu risolti, ma à quale costu? Per esempiu, un cuntainer in LXD basatu nantu à a distribuzione Alpine Linux cunsuma solu 7.60MB RAM, è induve a partizione radicali occupa dopu l'iniziu 9.5MB! Cumu ti piace cusì, Elon Musk? Vi cunsigliu di verificà capacità basi di LXD - un sistema di container in Linux

Dopu chì hè diventatu chjaru in generale ciò chì sò i cuntenituri LXD, andemu più in là è pensemu, chì s'ellu ci era una tale piattaforma di mietitrice induve puderebbe eseguisce in modu sicuru u codice per l'ospite, generà grafici, ligà dinamicamente (interattivamente) i widgets UI cù u vostru codice, supplementà u codice cù u testu cù u blackjack ... furmatu ? Una sorta di blog interattivu? Wow... a vogliu ! Vulete ! 🙂

Fighjate sottu à u ghjattu induve lanceremu in un containeru jupyter lab - a prossima generazione di l'interfaccia d'utilizatore invece di u Jupyter Notebook obsoleto, è ancu installemu moduli Python cum'è numpy, Pandas, matplotlib, IPyWidgets chì vi permetterà di fà tuttu ciò chì elencatu sopra è salvà tuttu in un schedariu speciale - un laptop IPython.

Lanciamentu di Jupyter in orbita LXD

Pianu di decollo orbitale ^

Lanciamentu di Jupyter in orbita LXD

Scupritemu un brevi pianu d'azzione per fà più faciule per noi di implementà u schema sopra:

  • Installemu è lanciamu un containeru basatu annantu à u kit di distribuzione Linux Alpine. Adupremu sta distribuzione perchè hè diretta à u minimalismu è installate solu u software più necessariu in questu, nunda superfluu.
  • Aghjunghjite un discu virtuale supplementu in u containeru è dà un nome - hostfs è muntà lu à u sistema di schedari di a ràdica. Stu discu permetterà di utilizà i fugliali nantu à l'ospite da un repertoriu datu in u cuntinuu. Cusì, i nostri dati seranu indipindenti di u cuntinuu. Se u cuntinuu hè sguassatu, i dati restanu nantu à l'ospite. Inoltre, stu schema hè utile per sparta a listessa data trà parechji cuntenituri senza utilizà i meccanismi di rete standard di a distribuzione di cuntainer.
  • Stallà Bash, sudo, e librerie necessarie, aghjunghje è cunfigurà un utilizatore di sistema
  • Installemu Python, moduli è compile dipendenze binari per elli
  • Stallà è lanciamu jupyter lab, persunalizà l'apparenza, installate estensioni per questu.

In questu articulu avemu da principià cù u lanciamentu di u cuntinuu, ùn cunsideremu micca installà è cunfigurà LXD, pudete truvà tuttu questu in un altru articulu - Funzioni basi di LXD - Sistemi di containeru Linux.

Installazione è cunfigurazione di u sistema di basa ^

Creemu un cuntinuu cù u cumandamentu in quale avemu specificatu l'imaghjini - alpine3, identificatore per u container - jupyterlab è, se necessariu, profili di cunfigurazione:

lxc init alpine3 jupyterlab --profile=default --profile=hddroot

Quì aghju aduprà un prufilu di cunfigurazione hddroot chì specifica per creà un cuntinuu cù una partizione radicali in Piscina di almacenamiento situatu nantu à un discu HDD fisicu:

lxc profile show hddroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: hddpool
    type: 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:
- none

Questu mi dà l'uppurtunità di sperimentà cuntenituri nantu à u discu HDD, salvendu e risorse di u discu SSD, chì hè ancu dispunibule in u mo sistema 🙂 per quale aghju creatu un prufilu di cunfigurazione separatu. ssdroot.

Dopu chì u cuntinuu hè creatu, hè in u statu STOPPED, cusì avemu bisognu di inizià eseguendu u sistema init in questu:

lxc start jupyterlab

Fighjemu una lista di cuntenituri in LXD usendu a chjave -c chì indica quale cvisualizzazione di colonne:

lxc list -c ns4b
+------------+---------+-------------------+--------------+
|    NAME    |  STATE  |       IPV4        | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool      |
+------------+---------+-------------------+--------------+

Quandu crea u cuntinuu, l'indirizzu IP hè statu sceltu aleatoriu, postu chì avemu usatu un prufilu di cunfigurazione default chì hè stata cunfigurata prima in l'articulu Funzioni basi di LXD - Sistemi di containeru Linux.

Cambiaremu stu indirizzu IP in un più memorable creendu una interfaccia di rete à u livellu di u containeru, è micca à u livellu di u prufilu di cunfigurazione cum'è avà in a cunfigurazione attuale. Ùn avete micca fà questu, pudete saltà.

Crià una interfaccia di rete eth0 chì liatemu à u switch (ponte di rete) lxdbr0 in quale avemu attivatu NAT secondu l'articulu precedente è u cuntinuu hà avà accessu à Internet, è ancu assignemu un indirizzu IP staticu à l'interfaccia - 10.0.5.5:

lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5

Dopu avè aghjustatu un dispositivu, u containeru deve esse riavviatu:

lxc restart jupyterlab

Verificate u statutu di u containeru:

lxc list -c ns4b
+------------+---------+------------------+--------------+
|    NAME    |  STATE  |       IPV4       | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0)  | hddpool      |
+------------+---------+------------------+--------------+

Stallà u software di basa è stallà u sistema ^

Per amministrari u nostru cuntinuu, avete bisognu di stallà u software seguente:

pacchettu
Description

bash
A shell GNU Bourne Again

bash-cumplementu
Cumplementu programabile per u bash shell

sudo
Dà certi utilizatori l'abilità di eseguisce alcuni cumandamenti cum'è root

Ombre
Suite di strumenti di gestione di password è di contu cù supportu per i fugliali d'ombra è PAM

tzdata
Fonti per u fusu orariu è i dati di l'ora di u ghjornu

nano
Pico editor clone cù miglioramenti

Inoltre, pudete installà supportu in e pagine man di u sistema installendu i seguenti pacchetti - man man-pages mdocml-apropos less

lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano

Fighjemu i cumandamenti è i chjavi chì avemu usatu:

  • lxc - Chjamate u cliente LXD
  • exec - Metudu di cliente LXD chì esegue un cumandamentu in u containeru
  • jupyterlab - ID di u containeru
  • -- - Una chjave speciale chì specifica micca di interpretà altre chjave cum'è chjave per lxc è passa u restu di a corda cum'è à u cuntinuu
  • apk - Gestore di pacchetti di distribuzione Alpine Linux
  • add - Un metudu di gestore di pacchetti chì stalla i pacchetti specificati dopu à u cumandimu

Dopu, avemu da stabilisce un fusu orariu in u sistema Europe/Moscow:

lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Dopu à stallà u fusu orariu, u pacchettu tzdata ùn hè più necessariu in u sistema, pigliarà spaziu, allora sguassemu:

lxc exec jupyterlab -- apk del tzdata

Verificate u fusu orariu:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Per ùn passà assai tempu per installà Bash per i novi utilizatori in u cuntinuu, in i seguenti passi copiemu i fugliali skel pronti da u sistema host à questu. Questu vi permetterà di prettify Bash in un containeru interattivamente. U mo sistema d'ospiti hè Manjaro Linux è i schedari chì sò copiati /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors in principiu sò adattati per Alpine Linux è ùn causanu micca prublemi critichi, ma pudete avè una distribuzione diversa è avete bisognu di calculà indipindentamente s'ellu ci hè un errore quandu eseguisce Bash in u cuntinuu.

Copia i schedari skel à u cuntinuu. Chjave --create-dirs creà i cartulari necessarii s'ellu ùn esiste micca:

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_colors

Per un utilizatore root esistente, copiate i schedarii skel appena copiati in u containeru à u cartulare di casa:

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_colors

Alpine Linux installà una shell di sistema per l'utilizatori /bin/sh, avemu da rimpiazzà cù root utilizatore in Bash:

lxc exec jupyterlab -- usermod --shell=/bin/bash root

chì root l'utilizatore ùn era micca senza password, hà bisognu di stabilisce una password. U cumandimu seguitu generà è stabilisce una nova password aleatoria per ellu, chì vi vede nantu à a pantalla di a cunsola dopu a so esecuzione:

lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "root:$PASSWD" | chpasswd && echo "New Password: $PASSWD""

New Password: sFiXEvBswuWA

Inoltre, creemu un novu utilizatore di sistema - jupyter per quale avemu da cunfigurà dopu jupyter lab:

lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter

Generemu è stabilisce una password per questu:

lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "jupyter:$PASSWD" | chpasswd && echo "New Password: $PASSWD""

New Password: ZIcbzWrF8tki

Dopu, eseguiremu dui cumandamenti, u primu creà un gruppu di sistema sudo, è u sicondu aghjunghje un utilizatore à questu jupyter:

lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter

Videmu à quali gruppi appartene l'utilizatore jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Tuttu hè bè, andemu avanti.

Permette à tutti l'utilizatori chì sò membri di u gruppu sudo aduprà cumandamentu sudo. Per fà questu, eseguite u seguente script, induve sed annulla a linea di paràmetru in u schedariu di cunfigurazione /etc/sudoers:

lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"

Installazione è cunfigurazione di JupyterLab ^

jupyter lab hè una applicazione Python, cusì ci vole prima installà stu interprete. Inoltre, jupyter lab Installaremu cù u gestore di pacchetti Python pip, è micca u sistema, perchè pò esse obsoletu in u repositoriu di u sistema è per quessa, avemu da risolve manualmente e dipendenze per questu installendu i seguenti pacchetti - python3 python3-dev gcc libc-dev zeromq-dev:

lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev

Aggiornemu i moduli python è u gestore di pacchetti pip à a versione attuale:

lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel

Stallà jupyter lab via gestore di pacchetti pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Dapoi l'estensione in jupyter lab sò sperimentali è ùn sò micca spediti ufficialmente cù u pacchettu jupyterlab, cusì avemu da stallà è cunfigurà manualmente.

Installemu NodeJS è u gestore di pacchetti per questu - NPM, postu chì jupyter lab li usa per e so estensioni:

lxc exec jupyterlab -- apk add nodejs npm

À l'estensione per jupyter lab chì avemu da stallà hà travagliatu, anu da esse installatu in u cartulare di l'utilizatori postu chì l'applicazione serà lanciata da l'utilizatore jupyter. U prublema hè chì ùn ci hè micca un paràmetru in u cumandamentu di lanciamentu chì pò esse passatu à un repertoriu; l'applicazione accetta solu una variabile d'ambiente è per quessa avemu da definisce. Per fà questu, scriveremu u cumandamentu d'esportazione variabile JUPYTERLAB_DIR in l'ambiente di l'utilizatori jupyter, à schedari .bashrcchì hè eseguitu ogni volta chì l'utilizatore accede:

lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"

U prossimu cumandamentu installerà una estensione speciale - estensione manager in jupyter lab:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"

Avà tuttu hè prontu per u primu lanciu jupyter lab, ma pudemu ancu installà alcune estensioni utili:

  • toc - Table of Contents, genera una lista di intestazioni in un articulu / notebook
  • jupyterlab-horizon-theme - Tema UI
  • jupyterlab_neon_theme - Tema UI
  • jupyterlab-ubu-theme - Un altru tema da l'autore stu articulu :) Ma in questu casu, a stallazione da u repository GitHub serà mostrata

Allora, eseguite i seguenti cumandamenti in sequenza per installà queste estensioni:

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"

Dopu avè installatu l'estensioni, avemu da compilà, postu chì prima, durante a stallazione, avemu specificatu a chjave --no-build per risparmià tempu. Avà acceleremu significativamente cumpilendu inseme in una volta:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"

Avà eseguite i seguenti dui cumandamenti per eseguisce per a prima volta jupyter lab. Puderia esse lanciatu cù un cumandamentu, ma in questu casu, u cumandamentu di lanciamentu, chì hè difficiule di ricurdà in a vostra mente, serà ricurdatu da bash in u cuntinuu, è micca nantu à l'ospite, induve ci sò digià abbastanza cumandamenti. per arregistrallu in a storia :)

Accedi à u containeru cum'è utilizatore jupyter:

lxc exec jupyterlab -- su -l jupyter

Dopu, corre jupyter lab cù chjavi è paràmetri cum'è indicatu:

[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser

Andà à l'indirizzu in u vostru navigatore web http://10.0.5.5:8888 è nantu à a pagina chì apre entra simule accessu chì vi vede in a cunsola. Copia è incollà nantu à a pagina, dopu cliccate Adelina. Dopu à login, andate à u menù di estensioni à a manca, cum'è mostra in a figura sottu, induve vi sarà dumandatu, quandu attivate u gestore di estensione, per piglià risichi di sicurezza installendu estensioni da terze parti per quale u cumandamentu. Sviluppu di JupyterLab ùn hè micca rispunsevuli:

Lanciamentu di Jupyter in orbita LXD

Tuttavia, simu isolati tuttu jupyter lab è mette in un cuntainer per chì l'estensioni di terzu chì necessitanu è utilizanu NodeJS ùn ponu micca almenu arrubà e dati nantu à u discu altru da quelli chì avemu apertu in u cuntinuu. Arrivà à i vostri documenti privati ​​​​in l'ospitu in /home I prucessi da u cuntinuu sò improbabile di riesce, è s'ellu facenu, allora avete bisognu à avè privileggi nantu à i schedari nantu à u sistema d'ospiti, postu chì eseguimu u cuntinuu in modu senza privilegiu. Basatu nantu à sta infurmazione, pudete valutà u risicu di include estensioni in jupyter lab.

Criatu taccuini IPython (pagine in jupyter lab) serà avà creatu in u cartulare di casa di l'utilizatori - /home/jupyter, ma i nostri piani sò di sparte e dati (sparte) trà l'ospiti è u cuntinuu, cusì torna à a cunsola è ferma jupyter lab eseguendo un tasto di scelta rapida - CTRL+C è rispondendu y nantu à dumanda. Dopu finisce a sessione interattiva di l'utilizatore jupyter compie un hotkey CTRL+D.

Sparte di dati cù l'ospite ^

Per sparte e dati cù l'ospiti, avete bisognu di creà un dispositivu in u cuntinuu chì vi permette di fà questu è per fà questu, eseguite u cumandimu seguitu induve avemu specificatu e seguenti chjave:

  • lxc config device add - U cumandimu aghjunghje a cunfigurazione di u dispusitivu
  • jupyter - ID di u containeru à quale a cunfigurazione hè aghjuntu
  • hostfs - ID di u dispusitivu. Pudete stabilisce qualsiasi nome.
  • disk - U tipu di dispusitivu hè indicatu
  • path — Specifica u percorsu in u containeru à quale LXD muntarà stu dispusitivu
  • source - Specificate a fonte, u percorsu à u cartulare nantu à l'ospite chì vulete sparte cù u cuntinuu. Specificate u percorsu secondu e vostre preferenze
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Per u catalogu /home/dv/projects/ipython-notebooks u permessu deve esse stabilitu à l'utilizatore di u containeru chì hà attualmente un UID uguale à SubUID + UID, vede u capitulu Sicurezza. Privilegi di Container in l'articulu Funzioni basi di LXD - Sistemi di containeru Linux.

Pone u permessu nantu à l'ospite, induve u pruprietariu serà l'utilizatore di u containeru jupyter, è a variabile $USER specificarà u vostru utilizatore d'ospite cum'è un gruppu:

sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks

Hola, Monde! ^

Sè avete sempre una sessione di cunsola aperta in u containeru cù jupyter lab, poi ripigliate cù una nova chjave --notebook-dir par stabilisce u valore /mnt/hostfs cum'è u percorsu à a radica di i laptops in u cuntinuu per u dispusitivu chì avemu creatu in u passu precedente:

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Allora vai à a pagina http://10.0.5.5:8888 è crea u vostru primu laptop clicchendu u buttone nantu à a pagina cum'è mostra in a stampa sottu:

Lanciamentu di Jupyter in orbita LXD

Allora, in u campu di a pagina, entre u codice Python chì mostrarà u classicu Hello World!. Quandu avete finitu di entre, appughjà CTRL+ENTER o u buttone "play" in a toolbar in cima per avè JupyterLab fà questu:

Lanciamentu di Jupyter in orbita LXD

À questu puntu, quasi tuttu hè prontu per l'usu, ma ùn serà micca interessante se ùn installemu micca moduli Python supplementari (applicazioni cumplete) chì ponu espansione significativamente e capacità standard di Python in jupyter labdunque, andemu avanti :)

PS L'interessante hè chì a vechja implementazione Ghjove sottu u nome di codice Notebook Jupyter ùn hè micca andatu è esiste in parallelu cù jupyter lab. Per passà à a versione vechja, seguitate u ligame aghjunghjendu u suffissu in l'indirizzu/tree, è a transizione à a nova versione hè realizata cù u suffissu /lab, ma ùn deve esse specificatu:

Espansione di e capacità di Python ^

In questa sezione, installemu moduli di lingua Python cusì putenti cum'è numpy, Pandas, matplotlib, IPyWidgets i risultati di quale sò integrati in laptops jupyter lab.

Prima di installà i moduli Python elencati attraversu u gestore di pacchetti pip prima avemu da risolve e dipendenze di u sistema in Alpine Linux:

  • g++ - Necessariu per cumpilà moduli, postu chì alcuni sò implementati in a lingua C ++ è cunnette à Python in runtime cum'è moduli binari
  • freetype-dev - dipendenza per u modulu Python matplotlib

Installazione di dipendenze:

lxc exec jupyterlab -- apk add g++ freetype-dev

Ci hè un prublema: in u statu attuale di a distribuzione Alpine Linux, ùn serà micca pussibule di cumpilà a nova versione di NumPy; un errore di compilazione appariscerà chì ùn puderebbe risolve:

errore: Ùn pudia micca custruisce roti per numpy chì utilizanu PEP 517 è ùn ponu micca esse stallati direttamente

Per quessa, stallà stu modulu cum'è un pacchettu di sistema chì distribuisce una versione digià compilata, ma un pocu più vechja di ciò chì hè attualmente dispunibule nantu à u situ:

lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev

Dopu, installate i moduli Python attraversu u gestore di pacchetti pip. Per piacè siate pazienti, postu chì alcuni moduli compilaranu è ponu piglià uni pochi di minuti. In a mo macchina, a compilazione hà pigliatu ~ 15 minuti:

lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib

Cancellazione di cache di installazione:

lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*

Moduli di prova in JupyterLab ^

Sè vo site in corsa jupyter lab, riavviate cusì chì i moduli appena stallati sò attivati. Per fà questu, in una sessione di cunsola, cliccate CTRL+C induve l'avete in esecuzione è entre y per piantà a dumanda è poi ripiglià jupyter lab pressendu a freccia su di u teclatu per ùn entre in u cumandamentu novu è dopu Enter per principià:

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Andate à a pagina http://10.0.5.5:8888/lab o rinfriscà a pagina in u vostru navigatore, è dopu entre u codice seguente in una nova cellula di notebook:

%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_plot

Duvete ottene un risultatu cum'è in a stampa sottu, induve IPyWidgets genera un elementu UI in a pagina chì interagisce interattivamente cù u codice fonte, è ancu matplotlib mostra u risultatu di u codice in forma di una stampa cum'è un graficu di funzione:

Lanciamentu di Jupyter in orbita LXD

Parechji esempii IPyWidgets pudete truvà in i tutoriali ccà

Ciò chì? ^

Ben fattu s'è tù stà è ghjuntu à a fine di l'articulu. Deliberatamente ùn aghju micca publicatu un script ready-made à a fine di l'articulu chì si stalla jupyter lab in "un clic" per incuragisce i travagliadori :) Ma pudete fà voi stessu, postu chì sapete cumu, dopu avè cullatu i cumandamenti in un unicu script Bash :)

Pudete ancu:

  • Stabilite un nome di rete per u cuntinuu invece di un indirizzu IP scrivendu in un simplice /etc/hosts è scrive l'indirizzu in u navigatore http://jupyter.local:8888
  • Ghjucate cù u limitu di risorse per u cuntinuu, per questu leghje u capitulu in capacità LXD di basa o uttene più infurmazione nantu à u situ di sviluppatore LXD.
  • Cambia u tema:

Lanciamentu di Jupyter in orbita LXD

È assai più pudete fà! Eccu tuttu. Ti pregu successu!

UPDATE: 15.04.2020/18/30 XNUMX:XNUMX - Errori curretti in u capitulu "Hello, World!"
UPDATE: 16.04.2020/10/00 XNUMX:XNUMX - Testu currettu è aghjuntu in a descrizzione di l'attivazione di u gestore di estensione jupyter lab
UPDATE: 16.04.2020/10/40 XNUMX:XNUMX - Errori curretti truvati in u testu è ligeramente cambiatu per u megliu u capitulu "Installazione di software di basa è cunfigurà u sistema"

Source: www.habr.com

Add a comment