A ju është dashur ndonjëherë të eksperimentoni me kodin ose shërbimet e sistemit në Linux, në mënyrë që të mos shqetësoheni për sistemin bazë dhe të mos prishni gjithçka në rast të një gabimi në kodin që duhet të funksionojë me privilegje root?
Por ç'të themi për faktin që le të themi se duhet të testoni ose ekzekutoni një grup të tërë mikroshërbimesh të ndryshme në një makinë? Njëqind apo edhe një mijë?
Me makinat virtuale të menaxhuara nga një hipervizor, probleme të tilla mund dhe do të zgjidhen, por me çfarë kostoje? Për shembull, një kontejner në LXD i bazuar në shpërndarjen Alpine Linux konsumon vetëm 7.60MB
RAM, dhe ku zë ndarja rrënjë pas fillimit 9.5MB
! Si ju pëlqen kjo, Elon Musk? Unë rekomandoj të kontrolloni aftësitë themelore të LXD - një sistem kontejnerësh në Linux
Pasi u bë e qartë në përgjithësi se çfarë janë kontejnerët LXD, le të shkojmë më tej dhe të mendojmë, çka nëse do të ekzistonte një platformë e tillë korrëse ku mund të ekzekutonit në mënyrë të sigurt kodin për hostin, të gjeneroni grafikë, të lidhni në mënyrë dinamike (interaktive) miniaplikacionet UI me kodin tuaj, plotëso kodin me tekst me blackjack... formatim? Një lloj blogu interaktiv? Wow... e dua! Dëshironi! 🙂
Shikoni nën mace ku do të lëshojmë në një enë laborator jupyter - gjenerata e ardhshme e ndërfaqes së përdoruesit në vend të Notebook-it të vjetëruar Jupyter, dhe ne gjithashtu do të instalojmë module Python si p.sh. i mprehtë, Pandas, matplotlib, IPyWidgets i cili do t'ju lejojë të bëni gjithçka të listuar më sipër dhe t'i ruani të gjitha në një skedar të veçantë - një laptop IPython.
lundrim
- Plani i ngritjes orbitale
- Instalimi dhe konfigurimi i sistemit bazë
- Instalimi i softuerit bazë dhe konfigurimi i sistemit
- Instalimi dhe konfigurimi i JupyterLab
- Ndarja e të dhënave me hostin
- Përshendetje Botë!
- Zgjerimi i aftësive të Python
- Testimi i moduleve në JupyterLab
- Çfarë tjetër?
Plani i ngritjes orbitale ^
Le të përshkruajmë një plan të shkurtër veprimi për ta bërë më të lehtë për ne zbatimin e skemës së mësipërme:
- Le të instalojmë dhe lëshojmë një kontejner bazuar në kompletin e shpërndarjes Linux Alpine. Ne do ta përdorim këtë shpërndarje sepse synon minimalizmin dhe do të instalojë vetëm softuerin më të nevojshëm në të, asgjë e tepërt.
- Le të shtojmë një disk virtual shtesë në kontejner dhe t'i japim një emër -
hostfs
dhe montoni atë në sistemin e skedarëve rrënjë. Ky disk do të bëjë të mundur përdorimin e skedarëve në host nga një direktori e caktuar brenda kontejnerit. Kështu, të dhënat tona do të jenë të pavarura nga kontejneri. Nëse kontejneri fshihet, të dhënat do të mbeten në host. Gjithashtu, kjo skemë është e dobishme për ndarjen e të dhënave të njëjta midis shumë kontejnerëve pa përdorur mekanizmat standardë të rrjetit të shpërndarjes së kontejnerëve. - Le të instalojmë Bash, sudo, bibliotekat e nevojshme, të shtojmë dhe konfigurojmë një përdorues të sistemit
- Le të instalojmë Python, module dhe të përpilojmë varësi binare për ta
- Le të instalojmë dhe lëshojmë laborator jupyter, personalizoni pamjen, instaloni shtesa për të.
Në këtë artikull do të fillojmë me lëshimin e kontejnerit, nuk do të konsiderojmë instalimin dhe konfigurimin e LXD, ju mund t'i gjeni të gjitha këto në një artikull tjetër - Karakteristikat themelore të sistemeve të kontejnerëve LXD - Linux.
Instalimi dhe konfigurimi i sistemit bazë ^
Ne krijojmë një enë me komandën në të cilën specifikojmë imazhin - alpine3
, identifikues për kontejnerin - jupyterlab
dhe, nëse është e nevojshme, profilet e konfigurimit:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
Këtu jam duke përdorur një profil konfigurimi hddroot
i cili specifikon krijimin e një kontejneri me një ndarje rrënjë në Pishinë magazinimi vendosur në një disk fizik HDD:
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
Kjo më jep mundësinë të eksperimentoj me kontejnerë në diskun HDD, duke kursyer burimet e diskut SSD, i cili është gjithashtu i disponueshëm në sistemin tim 🙂 për të cilin kam krijuar një profil të veçantë konfigurimi ssdroot
.
Pasi të krijohet kontejneri, ai është në gjendje STOPPED
, kështu që duhet ta nisim duke ekzekutuar sistemin init në të:
lxc start jupyterlab
Le të shfaqim një listë të kontejnerëve në LXD duke përdorur çelësin -c
që tregon se cilat cshfaqja e kolonave:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
Gjatë krijimit të kontejnerit, adresa IP u zgjodh rastësisht, pasi ne përdorëm një profil konfigurimi default
e cila ishte konfiguruar më parë në artikull Karakteristikat themelore të sistemeve të kontejnerëve LXD - Linux.
Ne do ta ndryshojmë këtë adresë IP në një adresë më të paharrueshme duke krijuar një ndërfaqe rrjeti në nivelin e kontejnerit dhe jo në nivelin e profilit të konfigurimit siç është tani në konfigurimin aktual. Ju nuk keni pse ta bëni këtë, ju mund ta kaloni atë.
Krijimi i një ndërfaqe rrjeti eth0
të cilin e lidhim me çelësin (ura e rrjetit) lxdbr0
në të cilën ne aktivizuam NAT sipas artikullit të mëparshëm dhe kontejneri tani do të ketë qasje në internet, dhe ne gjithashtu caktojmë një adresë IP statike në ndërfaqe - 10.0.5.5
:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Pas shtimit të një pajisjeje, kontejneri duhet të rindizet:
lxc restart jupyterlab
Kontrollimi i statusit të kontejnerit:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
Instalimi i softuerit bazë dhe konfigurimi i sistemit ^
Për të administruar kontejnerin tonë, duhet të instaloni softuerin e mëposhtëm:
paketë
Përshkrim
përplas
Predha GNU Bourne Again
bash-përfundim
Përfundim i programueshëm për guaskën bash
sudo
Jepni disa përdoruesve mundësinë për të ekzekutuar disa komanda si rrënjë
hije
Paketa e mjeteve të menaxhimit të fjalëkalimit dhe llogarisë me mbështetje për skedarët hije dhe PAM
tzdata
Burimet për zonën kohore dhe të dhënat e orës së ditës
nano
Klonimi i redaktorit Pico me përmirësime
Për më tepër, ju mund të instaloni mbështetje në faqet e sistemit duke instaluar paketat e mëposhtme − man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
Le të shohim komandat dhe çelësat që kemi përdorur:
lxc
— Telefononi klientin LXDexec
- Metoda e klientit LXD që ekzekuton një komandë në kontejnerjupyterlab
— ID e kontejnerit--
- Një çelës i veçantë që specifikon të mos interpretohen çelësat e mëtejshëm si çelësa përlxc
dhe kalojmë pjesën tjetër të vargut siç është në enëapk
— Menaxheri i paketave të shpërndarjes Alpine Linuxadd
— Një metodë e menaxherit të paketave që instalon paketat e specifikuara pas komandës
Më pas, ne do të vendosim një zonë kohore në sistem. Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Pas instalimit të zonës kohore, paketa tzdata
nuk nevojitet më në sistem, do të zërë hapësirë, prandaj le ta fshijmë:
lxc exec jupyterlab -- apk del tzdata
Kontrollimi i zonës kohore:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
Për të mos harxhuar shumë kohë duke konfiguruar Bash për përdoruesit e rinj në kontejner, në hapat e mëposhtëm do të kopjojmë skedarët skel të gatshëm nga sistemi pritës në të. Kjo do t'ju lejojë të zbukuroni Bash në një enë në mënyrë interaktive. Sistemi im pritës është Manjaro Linux dhe skedarët që po kopjohen /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
në parim ato janë të përshtatshme për Alpine Linux dhe nuk shkaktojnë probleme kritike, por mund të keni një shpërndarje të ndryshme dhe duhet të kuptoni në mënyrë të pavarur nëse ka një gabim kur ekzekutoni Bash në kontejner.
Kopjoni skedarët e skelit në kontejner. Celës --create-dirs
do të krijojë drejtoritë e nevojshme nëse ato nuk ekzistojnë:
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
Për një përdorues rrënjë ekzistues, kopjoni skedarët skel të sapokopjuar në kontejner në direktorinë kryesore:
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 instalon një guaskë sistemi për përdoruesit /bin/sh
, do ta zëvendësojmë me root
përdorues në Bash:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
Që root
përdoruesi nuk ishte pa fjalëkalim, ai duhet të vendosë një fjalëkalim. Komanda e mëposhtme do të gjenerojë dhe vendosë një fjalëkalim të ri të rastësishëm për të, të cilin do ta shihni në ekranin e konsolës pasi të ekzekutohet:
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
Gjithashtu, le të krijojmë një përdorues të ri të sistemit - jupyter
për të cilin do të konfigurojmë më vonë laborator jupyter:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
Le të krijojmë dhe vendosim një fjalëkalim për të:
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
Më pas, ne do të ekzekutojmë dy komanda, e para do të krijojë një grup sistemi sudo
, dhe e dyta do të shtojë një përdorues në të jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
Le të shohim se në cilat grupe bën pjesë përdoruesi jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
Gjithçka është në rregull, le të vazhdojmë.
Lejo të gjithë përdoruesit që janë anëtarë të grupit sudo
përdorni komandën sudo
. Për ta bërë këtë, ekzekutoni skriptin e mëposhtëm, ku sed
çkomenton linjën e parametrave në skedarin e konfigurimit /etc/sudoers
:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"
Instalimi dhe konfigurimi i JupyterLab ^
laborator jupyter është një aplikacion Python, kështu që fillimisht duhet të instalojmë këtë interpretues. Gjithashtu, laborator jupyter ne do të instalojmë duke përdorur menaxherin e paketave Python pip
, dhe jo ai i sistemit, sepse mund të jetë i vjetëruar në depon e sistemit dhe për këtë arsye, ne duhet t'i zgjidhim manualisht varësitë për të duke instaluar paketat e mëposhtme − python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
Le të përditësojmë modulet python dhe menaxherin e paketave pip
në versionin aktual:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
I vendosur laborator jupyter nëpërmjet menaxherit të paketave pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
Që nga zgjerimet në laborator jupyter janë eksperimentale dhe nuk dërgohen zyrtarisht me paketën jupyterlab, ndaj duhet ta instalojmë dhe konfigurojmë manualisht.
Le të instalojmë NodeJS dhe menaxherin e paketave për të - NPM, që nga ajo kohë laborator jupyter i përdor ato për zgjerimet e tij:
lxc exec jupyterlab -- apk add nodejs npm
Tek shtesat për laborator jupyter të cilat do t'i instalojmë funksionuan, ato duhet të instalohen në direktorinë e përdoruesit pasi aplikacioni do të lansohet nga përdoruesi jupyter
. Problemi është se nuk ka asnjë parametër në komandën e nisjes që mund të kalojë në një direktori; aplikacioni pranon vetëm një variabël mjedisi dhe për këtë arsye ne duhet ta përcaktojmë atë. Për ta bërë këtë, ne do të shkruajmë komandën e variablit të eksportit JUPYTERLAB_DIR
në mjedisin e përdoruesit jupyter
, për të paraqitur .bashrc
i cili ekzekutohet sa herë që përdoruesi regjistrohet:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
Komanda tjetër do të instalojë një shtesë të veçantë - menaxher i zgjerimit në laborator jupyter:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
Tani gjithçka është gati për lëshimin e parë laborator jupyter, por ne ende mund të instalojmë disa shtesa të dobishme:
toc
— Tabela e përmbajtjes, gjeneron një listë titujsh në një artikull/fletorejupyterlab-horizon-theme
- Tema e UIjupyterlab_neon_theme
- Tema e UIjupyterlab-ubu-theme
- Nje tjeter temë nga autori ky artikull :) Por në këtë rast do të shfaqet instalimi nga depoja e GitHub
Pra, ekzekutoni komandat e mëposhtme në mënyrë sekuenciale për të instaluar këto shtesa:
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"
Pas instalimit të shtesave, duhet t'i përpilojmë ato, pasi më parë, gjatë instalimit, ne specifikuam çelësin --no-build
për të kursyer kohë. Tani do të përshpejtojmë ndjeshëm duke i përpiluar ato së bashku në një lëvizje:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
Tani ekzekutoni dy komandat e mëposhtme për ta ekzekutuar për herë të parë laborator jupyter. Do të ishte e mundur ta lëshoni atë me një komandë, por në këtë rast, komanda e nisjes, e cila është e vështirë të mbahet mend në mendjen tuaj, do të mbahet mend nga bash në kontejner, dhe jo në host, ku tashmë ka komanda të mjaftueshme. për t'i regjistruar në histori :)
Hyni në kontejner si përdorues jupyter
:
lxc exec jupyterlab -- su -l jupyter
Më pas, vraponi laborator jupyter me çelësat dhe parametrat siç tregohet:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
Shkoni te adresa në shfletuesin tuaj të internetit http://10.0.5.5:8888 dhe në faqen që hapet fut shenjë qasje të cilën do ta shihni në tastierë. Kopjojeni dhe ngjisni në faqe, më pas klikoni Hyrja. Pas hyrjes, shkoni te menyja e shtesave në të majtë, siç tregohet në figurën më poshtë, ku do t'ju kërkohet që kur aktivizoni menaxherin e ekstensionit, të merrni rreziqe sigurie duke instaluar shtesa nga palë të treta për të cilat komanda Zhvillimi i JupyterLab nuk është përgjegjës:
Megjithatë, ne e izolojmë të gjithë laborator jupyter dhe vendoseni në një kontejner në mënyrë që shtesat e palëve të treta që kërkojnë dhe përdorin NodeJS të paktën të mos mund të vjedhin të dhëna në disk përveç atyre që hapim brenda kontejnerit. Shkoni te dokumentet tuaja private në host në /home
proceset nga kontejneri nuk kanë gjasa të kenë sukses, dhe nëse ndodhin, atëherë ju duhet të keni privilegje për skedarët në sistemin pritës, pasi ne e ekzekutojmë kontejnerin në mënyra e paprivilegjuar. Bazuar në këtë informacion, ju mund të vlerësoni rrezikun e përfshirjes së shtesave në laborator jupyter.
Krijoi fletore IPython (faqet në laborator jupyter) tani do të krijohet në drejtorinë kryesore të përdoruesit - /home/jupyter
, por planet tona janë të ndajmë të dhënat (ndarjen) midis hostit dhe kontejnerit, kështu që kthehuni në tastierë dhe ndaloni laborator jupyter duke ekzekutuar tastin e nxehtë - CTRL+C
dhe duke u përgjigjur y
sipas kërkesës. Pastaj përfundoni seancën interaktive të përdoruesit jupyter
kompletimi i një çelësi të nxehtë CTRL+D
.
Ndarja e të dhënave me hostin ^
Për të ndarë të dhënat me hostin, duhet të krijoni një pajisje në kontejner që ju lejon ta bëni këtë dhe për ta bërë këtë, ekzekutoni komandën e mëposhtme ku ne specifikojmë çelësat e mëposhtëm:
lxc config device add
— Komanda shton konfigurimin e pajisjesjupyter
— ID e kontejnerit në të cilin është shtuar konfigurimihostfs
- ID e pajisjes. Ju mund të vendosni çdo emër.disk
— Tregohet lloji i pajisjespath
— Përcakton shtegun në kontejnerin në të cilin LXD do ta montojë këtë pajisjesource
— Specifikoni burimin, shtegun drejt drejtorisë në host që dëshironi të ndani me kontejnerin. Specifikoni rrugën sipas preferencave tuaja
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
Për katalogun /home/dv/projects/ipython-notebooks
leja duhet të vendoset për përdoruesin e kontejnerit i cili aktualisht ka një UID të barabartë me SubUID + UID
, shih kapitullin Siguria. Privilegjet e kontejnerit në artikull Karakteristikat themelore të sistemeve të kontejnerëve LXD - Linux.
Vendosni lejen për hostin, ku pronari do të jetë përdoruesi i kontejnerit jupyter
, dhe ndryshoren $USER
do të specifikojë përdoruesin tuaj pritës si një grup:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
Përshendetje Botë! ^
Nëse keni ende një seancë konsole të hapur në kontejnerin me laborator jupyter, më pas riniseni me një çelës të ri --notebook-dir
duke vendosur vlerën /mnt/hostfs
si shtegu drejt rrënjës së laptopëve në kontejnerin për pajisjen që krijuam në hapin e mëparshëm:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Pastaj shkoni në faqe http://10.0.5.5:8888 dhe krijoni laptopin tuaj të parë duke klikuar butonin në faqe siç tregohet në foton më poshtë:
Më pas, në fushën në faqe, futni kodin Python që do të shfaqë klasiken Hello World!
. Kur të keni përfunduar futjen, shtypni CTRL+ENTER
ose butonin "luaj" në shiritin e veglave në krye që JupyterLab të bëjë këtë:
Në këtë pikë, pothuajse gjithçka është gati për përdorim, por nuk do të jetë interesante nëse nuk instalojmë module shtesë Python (aplikacione të plota) që mund të zgjerojnë ndjeshëm aftësitë standarde të Python në laborator jupyterPrandaj, le të vazhdojmë :)
PS Gjëja interesante është se zbatimi i vjetër Jupiteri nën emrin e koduar Fletore Jupyter nuk është larguar dhe ekziston paralelisht me laborator jupyter. Për të kaluar në versionin e vjetër, ndiqni lidhjen duke shtuar prapashtesën në adresë/tree
, dhe kalimi në versionin e ri kryhet me prapashtesë /lab
, por nuk duhet të specifikohet:
- Notebook Jupyter - http://10.0.5.5:8888/tree
- Jupyter Lab - http://10.0.5.5:8888/lab
Zgjerimi i aftësive të Python ^
Në këtë seksion, ne do të instalojmë module të tilla të fuqishme të gjuhës Python si i mprehtë, Pandas, matplotlib, IPyWidgets rezultatet e të cilave janë të integruara në laptopë laborator jupyter.
Përpara se të instaloni modulet e listuara të Python përmes menaxherit të paketave pip
së pari duhet të zgjidhim varësitë e sistemit në Alpine Linux:
g++
— Nevojitet për përpilimin e moduleve, pasi disa prej tyre janë implementuar në gjuhë C + + dhe lidheni me Python në kohën e ekzekutimit si module binarefreetype-dev
- varësia për modulin Python matplotlib
Instalimi i varësive:
lxc exec jupyterlab -- apk add g++ freetype-dev
Ekziston një problem: në gjendjen aktuale të shpërndarjes Alpine Linux, nuk do të jetë e mundur të përpilohet versioni i ri i NumPy; do të shfaqet një gabim përpilimi që nuk mund ta zgjidhja:
GABIM: Nuk mund të ndërtohen rrota për numpy të cilat përdorin PEP 517 dhe nuk mund të instalohen drejtpërdrejt
Prandaj, ne do ta instalojmë këtë modul si një paketë sistemi që shpërndan një version tashmë të përpiluar, por pak më të vjetër se ai që është aktualisht i disponueshëm në sit:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
Më pas, instaloni modulet Python përmes menaxherit të paketave pip
. Jini të durueshëm pasi disa module do të përpilohen dhe mund të zgjasin disa minuta. Në makinën time, përpilimi zgjati ~ 15 minuta:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
Pastrimi i memories së instalimit:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
Testimi i moduleve në JupyterLab ^
Nëse jeni duke vrapuar laborator jupyter, rinisni atë në mënyrë që modulet e sapo instaluara të aktivizohen. Për ta bërë këtë, në një seancë konsole, klikoni CTRL+C
ku e keni në punë dhe hyni y
për të ndaluar kërkesën dhe më pas për të filluar përsëri laborator jupyter duke shtypur shigjetën lart në tastierë që të mos futet përsëri komanda dhe më pas Enter
për ta nisur atë:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Shkoni në faqe http://10.0.5.5:8888/lab ose rifreskoni faqen në shfletuesin tuaj dhe më pas futni kodin e mëposhtëm në një qelizë të re të fletores:
%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
Ju duhet të merrni një rezultat si në foton më poshtë, ku IPyWidgets gjeneron një element UI në faqe që ndërvepron në mënyrë interaktive me kodin burimor, dhe gjithashtu matplotlib shfaq rezultatin e kodit në formën e një fotografie si grafik funksioni:
Shumë shembuj IPyWidgets mund ta gjeni në tutorial këtu
Çfarë tjetër? ^
Bravo nëse qëndruat dhe arritët në fund të artikullit. Unë qëllimisht nuk postova një skenar të gatshëm në fund të artikullit që do të instalohej laborator jupyter në "një klik" për të inkurajuar punëtorët :) Por ju mund ta bëni vetë, pasi tashmë e dini se si, pasi keni mbledhur komandat në një skenar të vetëm Bash :)
Ju gjithashtu mund të:
- Vendosni një emër rrjeti për kontejnerin në vend të një adrese IP duke e shkruar atë në një të thjeshtë
/etc/hosts
dhe shkruani adresën në shfletues http://jupyter.local:8888 - Luani me kufirin e burimeve për kontejnerin, për këtë lexoni kapitullin në aftësitë bazë LXD ose merrni më shumë informacion në faqen e zhvilluesit të LXD.
- Ndryshoni temën:
Dhe shumë më tepër që mund të bëni! Kjo eshte e gjitha. Ju uroj suksese!
PËRDITËSIM: 15.04.2020 18:30 - Gabimet e korrigjuara në kapitullin "Përshëndetje, Botë!"
PËRDITËSIM: 16.04.2020 10:00 — Teksti i korrigjuar dhe shtuar në përshkrimin e aktivizimit të menaxherit të zgjerimit laborator jupyter
PËRDITËSIM: 16.04.2020 10:40 — Gabimet e korrigjuara të gjetura në tekst dhe të ndryshuara pak për mirë në kapitullin "Instalimi i softuerit bazë dhe konfigurimi i sistemit"
Burimi: www.habr.com