A keni provuar ndonjëherë të eksperimentoni me kodin ose utilitat sistemorë në Linux në mënyrë që të mos shqetësoheni për sistemin bazë dhe të mos shkatërroni gjithçka në rast të një gabimi në kodin që duhet të ekzekutohet me privilegje root?
Si Ă«shtĂ« pĂ«r shembull, nĂ«se Ă«shtĂ« e nevojshme tĂ« testoni ose запŃŃĐșа njĂ« grup tĂ« gjithĂ« mikrosherbimeve tĂ« ndryshme nĂ« njĂ« makinĂ«? NjĂ«qind ose madje njĂ« mijĂ«?
Me makinat virtuale tĂ« menaxhuara nga hipervizori, ndoshta mund tĂ« zgjidhen kĂ«to probleme, por me çfarĂ« kostoje? PĂ«r shembull, njĂ« enĂ« nĂ« LXD e bazuar nĂ« distribuimin Alpine Linux minimalisht konsumon vetĂ«m 7.60MB RAM, dhe ku ndarja rrĂ«qethĂ«se pas nisjes zĂ« 9.5MB! Si tĂ« duket kjo, Elon Musk? Rekomandoj tĂ« shqyrtoni mundĂ«sitĂ« bazĂ« tĂ« LXD â sistemit tĂ« enĂ«ve nĂ« Linux.
Pas qĂ« Ă«shtĂ« bĂ«rĂ« e qartĂ« se çfarĂ« janĂ« enĂ«t LXD, le tĂ« shkojmĂ« mĂ« tej dhe tĂ« mendojmĂ«, çfarĂ« do tĂ« ndodhte nĂ«se do tĂ« kishte njĂ« platformĂ«-kombajn, ku mund tĂ« ekzekutojmĂ« sigurt njĂ« kod pĂ«r hostin, tĂ« krijojmĂ« grafikĂ«, t'i lidhim dinamikisht (interaktivisht) widget-et e UI me kodin tuaj, tĂ« plotĂ«sojmĂ« kodin me tekst me blackjack⊠formatim? Disa si njĂ« blog interaktiv? Wow⊠Dua! Dua! đ
Shikoni poshtĂ« ku ne do tĂ« nisim nĂ« enĂ« JupyterLab â ndĂ«rfaqja e pĂ«rdoruesit e gjeneratĂ«s sĂ« ardhshme nĂ« vend tĂ« Jupyter Notebook tĂ« vjetruar, si dhe do tĂ« instalojmĂ« module tĂ« tilla Python si NumPy, Pandas, Matplotlib, IPyWidgets tĂ« cilat do tĂ« lejojnĂ« tĂ« realizojmĂ« tĂ« gjitha ato tĂ« pĂ«rmendura mĂ« sipĂ«r dhe t'i ruajmĂ« ato nĂ« njĂ« skedar tĂ« veçantĂ« â njĂ« notebook IPython.

Navigim
- Plani i ngritjes në orbitë
- Instalimi dhe konfigurimi i sistemit bazë
- Instalimi i softuerit bazë dhe konfigurimi i sistemit
- Instalimi dhe konfigurimi i JupyterLab
- Ndajmë të dhënat me hostin
- Hello, World!
- Zgjerimi i mundësive të Python
- Testimi i moduleve në JupyterLab
- ĂfarĂ« tjetĂ«r?
Plani i ngritjes në orbitë ^

Të kremtojmë një plan të shkurtër veprimi, në mënyrë që të na ishte më e lehtë të realizonim skemën e mësipërme:
- Do të instalojmë dhe nisim një enë të bazuar në distribuimin Alpine Linux. Ne do ta përdorim këtë distribucion pasi ai është i orientuar drejt minimalizmit dhe do të instalojmë në të vetëm softin më të domosdoshëm, asgjë të tepërt.
- Do tĂ« shtojmĂ« njĂ« disk virtual tĂ« shtesĂ« nĂ« enĂ« tĂ« cilit do t'i japim emrin â
hostfsdhe do ta montojmë në sistemin rrënjor të dosjeve. Ky disk do të mundësojë përdorimin e skedarëve në host nga një katalog i caktuar brenda kontejnerit. Kështu, të dhënat do të na mbeten të pavarura nga kontejneri. Në rast se kontejneri fshihet, të dhënat do të qëndrojnë në host. Gjithashtu, kjo skemë është e dobishme për ndarjen e të dhënave midis shumë konteinerëve duke mos përdorur mekanizmat rrjetërore standarde të shpërndarjes së kontejnerëve. - Do të instalojmë Bash, sudo, bibliotekat e nevojshme, do të shtojmë dhe konfigurojmë një përdorues sistemor.
- Do të instalojmë Python, modulet dhe do t'i kompilojmë për varësitë e tyre binarë.
- Do të instalojmë dhe startojmë. JupyterLab, do të konfigurojmë pamjen, do të instalojmë zgjerime për të.
NĂ« kĂ«tĂ« artikull ne do tĂ« fillojmĂ« me fillimin e kontejnerit, nuk do tĂ« shqyrtojmĂ« instalimin dhe konfigurimin e LXD, gjithçka tjetĂ«r mund ta gjeni nĂ« njĂ« artikull tjetĂ«r â Funksionet bazĂ« tĂ« LXD â sistemi i konteinerĂ«ve nĂ« Linux.
Instalimi dhe konfigurimi i sistemit bazë ^
KrijojmĂ« kontejner me komandĂ«n nĂ« tĂ« cilĂ«n specifikojmĂ« imazhin â alpine3, identifikuesin pĂ«r kontejnerin â jupyterlab dhe, nĂ« rast nevoje, profilin e konfigurimeve:
lxc init alpine3 jupyterlab --profile=default --profile=hddrootKëtu po përdor një profil konfigurimi hddroot i cili tregon të krijojmë një kontejner me seksionin root në Storage Pool i vendosur në diskun 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:
- noneKjo mĂ« jep mundĂ«sinĂ« tĂ« eksperimentoj me kontejnerĂ«t nĂ« diskun HDD duke kursyer burimet e diskut SSD tĂ« cilin gjithashtu e kam nĂ« sistemin tim đ pĂ«r tĂ« cilin kam krijuar njĂ« profil konfigurimi tĂ« veçantĂ«. ssdroot.
Pas krijimit të kontejnerit, ai ndodhet në gjendjen STOPPED, prandaj na nevojitet ta nisim duke aktivizuar sistemin init në të:
lxc start jupyterlabDo të nxjerrim listën e konteinerëve në LXD duke përdorur çelësin -c i cili tregon se cilat ckolona të shfaqen në ekran:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+Kur krijohet kontejneri, adresa IP Ă«shtĂ« zgjedhur rastĂ«sisht, pasi kemi pĂ«rdorur profilin e konfigurimit default i cili Ă«shtĂ« konfiguruar mĂ« parĂ« nĂ« artikullin Funksionet bazĂ« tĂ« LXD â sistemi i konteinerĂ«ve nĂ« Linux.
Ne do ta ndryshojmë këtë adresë IP për një më të lehtë për t'u kujtuar, duke krijuar një ndërfaqe rrjeti në nivelin e kontejnerit, dhe jo në nivelin e profilit të konfigurimit siç është tani në konfigurimin aktual. Kjo nuk është e domosdoshme, mund ta injoroni.
KrijojmĂ« njĂ« ndĂ«rfaqe rrjeti eth0 e cila lidhet me çswitch (urĂ« rrjeti) lxdbr0 nĂ« tĂ« cilin kemi aktivizuar NAT sipas artikullit tĂ« kaluar dhe tani kontejneri do tĂ« ketĂ« qasje nĂ« internet, si dhe i caktojmĂ« njĂ« adresĂ« IP statike ndĂ«rfaqes â 10.0.5.5:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5Pasi të shtoni pajisjen, kontejneri duhet të riniset:
lxc restart jupyterlabKontrolloni statusin e 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 administrimin e kontejnerit tonë, është e nevojshme të instaloni softuerin e mëposhtëm:
Pako
Përshkrimi
bash
Shkalla GNU Bourne Again
bash-completion
Përfundimi programues për shkallën bash
â informasiya tÉhlĂŒkÉsizliyi
Jep disa përdoruesve mundësinë për të ekzekutuar disa komanda si root
shadow
Paketë menaxhimi i fjalëkalimeve dhe llogarive me mbështetje për skedarët shadow dhe PAM
tzdata
Burimet për informacionin mbi zonat e kohës dhe përmbushjen e saj
nano
Klon i editorit Pico me përmirësime
ShtesĂ«, mund tĂ« instaloni mbĂ«shtetje nĂ« sistemin man-pages duke instaluar paketat e mĂ«poshtme â man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nanoLe të shqyrtojmë komandat dhe çelësat që kemi përdorur:
lxcâ Thirrja e klientit LXDexecâ Metoda e klientit LXD qĂ« ekzekuton komandĂ«n nĂ« kontejnerjupyterlabâ Identifikuesi i kontejnerit--â NjĂ« çelĂ«s i veçantĂ« qĂ« tregon tĂ« mos interpretohet çelĂ«sat e mĂ«tejshĂ«m si çelĂ«sa pĂ«rlxcdhe tĂ« kalojĂ« tĂ« gjithĂ« stringun e mbetur siç Ă«shtĂ« nĂ« kontejnerapkâ Menaxheri i paketave tĂ« shpĂ«rndarjes Alpine Linuxaddâ Metoda e menaxherit tĂ« paketave qĂ« instalon paketat e caktuara pas komandĂ«s
Më pas, do të vendosim zonën e kohës në sistem Europe/Moscow:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtimePasi të vendoset zona e kohës, paketa tzdata në sistemin më nuk është e nevojshme, do të mbajë hapësirë, prandaj, ta heqim atë:
lxc exec jupyterlab -- apk del tzdataKontrolloni zonën e kohës:
lxc exec jupyterlab -- date
E mërkurë, 15 prill 2020, 10:49:56 MSKPër të mos humbur shumë kohë për konfigurimin e Bash për përdoruesit e rinj në kontejner, me veprimet e mëposhtme, do të kopjojmë në të skel-fajlat tashmë të gatshme nga sistemi pritës. Kjo do të lejojë që të zbukurojmë Bash-in në kontejner në mënyrë interaktive. Sistemi im pritës është Manjaro Linux dhe skel-fajlat e kopjuara /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors në parim i përshtaten Alpine Linux dhe nuk shkaktojnë probleme kritike, por për ju mund të jetë shpërndarje tjetër dhe duhet të merrni vesh për vete në rast të një gabimi në ekzekutimin e Bash në kontejner.
Kopjoni skel-fajlat nĂ« kontejner. ĂelĂ«si --create-dirs do tĂ« krijojĂ« direktoritĂ« 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_colorsPër përdoruesin root që tashmë ekziston, do të kopjojmë në direktorinë e tij të shtëpisë skel-fajllat e sapo kopjuar në konteiner:
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_colorsNë Alpine Linux, për përdoruesit vendoset një shell sistemik /bin/sh, do ta zëvendësojmë atë me root përdoruesin Bash:
lxc exec jupyterlab -- usermod --shell=/bin/bash rootPër root përdoruesi nuk ishte pa fjalëkalim, i nevojitet për të vendosur një fjalëkalim. Komanda e mëposhtme do të gjenerojë dhe vendosë një fjalëkalim të ri rastësor që do ta shihni në ekranin e konsolës pas përfundimit të saj:
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: sFiXEvBswuWAGjithashtu, do tĂ« krijojmĂ« njĂ« pĂ«rdorues tĂ« ri sistemik â jupyter pĂ«r tĂ« cilin mĂ« vonĂ« do tĂ« konfigurojmĂ« JupyterLab:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyterDo të gjenerojmë dhe vendosim fjalëkalimin 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: ZIcbzWrF8tkiMĂ« pas do tĂ« ekzekutojmĂ« dy komanda, e para do tĂ« krijojĂ« njĂ« grup sistemik â informasiya tÉhlĂŒkÉsizliyi, dhe e dyta do tĂ« shtojĂ« nĂ« tĂ« pĂ«rdoruesin jupyter:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyterTë shohim, në cilat grupe është përdoruesi jupyter:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudoGjithçka është në rregull, vazhdojmë më tej.
LejojmĂ« tĂ« gjithĂ« pĂ«rdoruesit qĂ« janĂ« nĂ« grupin â informasiya tÉhlĂŒkÉsizliyi tĂ« pĂ«rdorin komandĂ«n â informasiya tÉhlĂŒkÉsizliyi. PĂ«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 ^
JupyterLab â Ă«shtĂ« njĂ« aplikacion Python, prandaj duhet sĂ« pari tĂ« instalohet ky interpretuese. Gjithashtu, JupyterLab do tĂ« instalojmĂ« me ndihmĂ«n e menaxherit tĂ« paketave Python pip, jo me sistemin, sepse nĂ« repository sistemor mund tĂ« jetĂ« i vjetruar, dhe prandaj, duhet manualisht tĂ« lejojmĂ« 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-devDo të azhurnojmë modulët Python dhe menaxherin e paketave pip në versionin aktual:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheelInstalojmë JupyterLab përmes menaxherit të paketave pip:
lxc exec jupyterlab -- python3 -m pip install jupyterlabPasi që zgjerimet në JupyterLab janë eksperimentale dhe zyrtarisht ato nuk ofrohen me paketën jupyterlab, prandaj, ne duhet t'i instalojmë dhe konfiguroni ato manualisht.
Tani do tĂ« instalojmĂ« NodeJS dhe menaxherin e paketave pĂ«r tĂ« â NPM, pasi JupyterLab pĂ«rdor ato pĂ«r zgjerimet e tij:
lxc exec jupyterlab -- apk add nodejs npmPër të cilat zgjerime JupyterLab që do të instalojmë të funksionojnë, ato duhet të instalohen në katalogun e përdoruesit pasi aplikacioni do të ekzekutohet nga përdoruesi jupyter. Problemi është se nuk ka parametër në komandën e ekzekutimit për të kaluar katalogun, aplikacioni pranon vetëm variablën e mjedisit dhe prandaj ne duhet ta përcaktojmë atë. Për këtë, do të shkruajmë komandën për eksportimin e variablës JUPYTERLAB_DIR në mjedisin e përdoruesit jupyter, në skedarin .bashrc, i cili ekzekutohet çdo herë kur përdoruesi hyn në sistem:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"Me komandën tjetër do të instalojmë një zgjerim të veçantë - menaxherin e zgjerimeve në 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"Tani gjithçka është gati për ekzekutimin e parë JupyterLab, por ne mund të instalojmë disa zgjerime të dobishme:
tocâ Tabela e PĂ«rmbajtjes, gjeneron njĂ« listĂ« titujsh nĂ« artikullin/joĂ«nkotĂ«kujupyterlab-horizon-themeâ TemĂ« UIjupyterlab_neon_themeâ TemĂ« UIjupyterlab-ubu-themeâ NjĂ« tjetĂ«r temĂ« nga autori i kĂ«tij artikulli đ Por nĂ« kĂ«tĂ« rast, do tĂ« shikohet instalimi nga repositoriumi GitHub
Pra, ekzekutoni me radhë komandat e mëposhtme për të instaluar këto zgjerime:
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ë zgjerimeve ne duhet t'i kompidojmë ato, pasi më parë, në instalim kemi caktuar çelësin --no-build për të kursyer kohë. Tani do të përshpejtojmë dukshëm duke i kompaktuar ato së bashku një herë:
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 ekzekutimin e parĂ« JupyterLabE ishte e mundur ta niste shĂ«rbimin me njĂ« komandĂ«, por nĂ« kĂ«tĂ« rast, komanda e nisjes, tĂ« cilĂ«n e mbani mend, do tĂ« ruhet nĂ« bash nĂ« konteiner dhe jo nĂ« host, ku ka mjaft komanda pĂ«r t'u regjistruar nĂ« historinĂ« e tij đ
Hyni në konteiner si përdorues jupyter:
lxc exec jupyterlab -- su -l jupyterPastaj nisni JupyterLab me çelësat dhe parametrat siç tregohet:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browserShkoni në shfletuesin e internetit në adresën http://10.0.5.5:8888 dhe në faqen e hapur shkruani token qasje që do të shihni në konsolë. Kopjoni atë dhe ngjituni në faqe, pastaj klikoni Identifikohu. Pas hyrjes, kaloni në menunë e zgjerimeve majtas, siç tregohet në figurën më poshtë, ku ju ofrohet që gjatë aktivizimit të menaxhuesit të zgjerimeve të pranoni rrezikshmëri për të instaluar zgjerime nga palë të treta, për të cilat ekipi Zhvillimi i JupyterLab nuk merr përgjegjësi:

MegjithatĂ«, ne po e izolojmĂ« atĂ« plotĂ«sisht JupyterLab dhe e vendosim nĂ« konteiner, nĂ« mĂ«nyrĂ« qĂ« zgjerimet e jashtme qĂ« kĂ«rkojnĂ« dhe pĂ«rdorin NodeJS tĂ« mos mund tĂ« vjedhin tĂ« paktĂ«n tĂ« dhĂ«nat nĂ« disk pĂ«rveç atyre qĂ« ne hapim brenda konteinerit. TĂ« arrijmĂ« nĂ« dokumentet tuaja private nĂ« host /home Ă«shtĂ« e vĂ«shtirĂ« nga proceset nĂ« konteiner, dhe edhe nĂ«se Ă«shtĂ« e mundur, kjo kĂ«rkon privilegje mbi skedarĂ«t nĂ« sistemin host, pasi ne e nisim konteinerin nĂ« reĆŸim jo privilegjuar. Duke u bazuar nĂ« kĂ«tĂ« informacion, ju mund tĂ« vlerĂ«soni rrezikun e aktivizimit tĂ« zgjerimeve nĂ« JupyterLab.
IPython notebook tĂ« krijuara (faqet nĂ« JupyterLab) tani do tĂ« krijohen nĂ« drejtorinĂ« e shtĂ«pisĂ« sĂ« pĂ«rdoruesit â /home/jupyter, por nĂ« planet tona Ă«shtĂ« qĂ« tĂ« ndajmĂ« tĂ« dhĂ«nat (tĂ« ndarim) midis hostit dhe konteinerit, kĂ«shtu qĂ«, kthehuni nĂ« konsolĂ« dhe ndaloni JupyterLab duke bĂ«rĂ« hotkey â CTRL+C dhe duke u pĂ«rgjigjur y kĂ«rkesĂ«s. MĂ« pas, ndaloni sesionin interaktiv tĂ« pĂ«rdoruesit jupyter duke bĂ«rĂ« hotkey CTRL+D.
Ndajmë të dhënat me hostin ^
Për të ndarë të dhënat me hostin, ne duhet të krijojmë në konteiner një pajisje që e lejon këtë, dhe për këtë, tregoni komandën e mëposhtme ku ne specifikojmë çelësat e mëposhtëm:
lxc config device addâ Komanda shton konfigurimin e pajisjesjupyterâ Identifikuesi i konteinerit nĂ« tĂ« cilin shtohet konfigurimihostfsâ Identifikuesi i pajisjes. Ju mund tĂ« jepni çdo emĂ«r.diskâ Tregohet lloji i pajisjespathâ Tregohet rruga nĂ« konteinerin ku LXD do tĂ« montojĂ« kĂ«tĂ« pajisjesourceâ ShĂ«nohet burimi, rruga drejt katalogut nĂ« hostin qĂ« dĂ«shironi tĂ« ndani me kontejnerin. ShĂ«noni rrugĂ«n sipas preferencave tuaja
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooksPĂ«r katalogun /home/dv/projects/ipython-notebooks duhet tĂ« jetĂ« e vendosur leja pĂ«r pĂ«rdoruesin e konteinerit i cili tani ka UID tĂ« barabartĂ« me SubUID + UID, shihni kapitullin Siguria. PrivilegjĂ«t e kontejnerĂ«ve nĂ« artikullin Funksionet bazĂ« tĂ« LXD â sistemi i konteinerĂ«ve nĂ« Linux.
Vendosim lejen në host, ku pronari do të jetë përdoruesi i konteinerit jupyter, dhe variabli $USER do t'i tregojë përdoruesit tuaj të hostit si grup:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooksHello, World! ^
Nëse ende keni hapur një sesion konsolë në kontenier me JupyterLab, atëherë rivendoseni me çelësin e ri --notebook-dir duke vendosur vlerën /mnt/hostfs si rrugën deri në korin e notebook-ë për kontenierin për pajisjen që krijuam në hapin e mëparshëm:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfsPastaj shkoni në faqen http://10.0.5.5:8888 dhe krijoni notebook-un tuaj të parë duke klikuar butonin në faqen siç është treguar në figurën më poshtë:

Më pas në fushën në faqe shkruani kod në gjuhën Python që do të nxjerrë klasiken Hello World!. Pas përfundimit të hyrjes, shtypni CTRL+ENTER apo butonin "luaj" në panelin e mjetëve lart që JupyterLab të ekzekutojë këtë:

Me kĂ«tĂ«, pothuajse gjithçka Ă«shtĂ« gati pĂ«r t'u pĂ«rdorur, por do tĂ« ishte e mĂ«rzitshme, nĂ«se nuk instalojmĂ« module tĂ« tjera Python (aplikacione tĂ« plota) qĂ« lejojnĂ« zgjerimin e konsiderueshĂ«m tĂ« kapaciteteve standarde tĂ« Python nĂ« JupyterLab, prandaj, le tĂ« vazhdojmĂ« đ
P.S. E interesante është se implementimi i vjetër Jupyter me emrin kodor Jupyter Notebook nuk ka humbur dhe ekziston paralelisht me JupyterLab. Për të kaluar në versionin e vjetër, vizitoni linkun duke shtuar sufiksin në adresë/tree, dhe kalimi në versionin e ri bëhet me sufiksin /lab, por nuk është detyrueshëm ta tregoni:
- Jupyter Notebook â http://10.0.5.5:8888/tree
- Jupyter Lab â http://10.0.5.5:8888/lab
Zgjerimi i mundësive të Python ^
Në këtë seksion do të instalojmë module kaq të fuqishme të gjuhës Python si NumPy, Pandas, Matplotlib, IPyWidgets rezultatet e të cilëve do të integrohen në notebook JupyterLab.
Para se të instalojmë module të lartpërmendura Python përmes menaxherit të paketave pip ne duhet fillimisht të lejojmë varësitë sistemore në Alpine Linux:
g++â Nevojitet pĂ«r kompilimin e moduleve, pasi disa prej tyre janĂ« implementuar nĂ« gjuhĂ«n C++ dhe lidhen me Python nĂ« kohĂ«n e ekzekutimit si module binarĂ«freetype-devâ varĂ«si pĂ«r modulin Python Matplotlib
Instalojmë varësitë:
lxc exec jupyterlab -- apk add g++ freetype-devKa një problem, në gjendjen aktuale të distribuimit të Alpine Linux, nuk do të mund të kompilohet një version i ri i NumPy, do të dalë një gabim kompilimi që nuk mund ta zgjidh:
ERROR: Nuk mund të ndërtosh rrotat për numpy që përdorin PEP 517 dhe nuk mund të instalohet drejtpërdrejt
Prandaj, ne do ta instalojmë këtë modul si një paketë sistemore që shpërndan një version të kompiliuar tashmë, por pak më të vjetër se ai i disponueshëm tani në sit:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-devMë pas, instalojmë modulat e Pythonit përmes menaxhuesit të paketave pip. Kërko durim, pasi disa module do të kompilohet dhe do të marrë disa minuta. Në makinën time, kompilimi zgjati rreth 15 minuta:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlibFshijmë caches e instalimeve:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*Testimi i moduleve në JupyterLab ^
Nëse keni të aktivizuar JupyterLab, riaktivizoni atë që të aktivizohen modulat e reja të instaluara. Për ta bërë këtë, në seancën e konsolës, shtypni CTRL+C aty ku është aktivizuar dhe shkruani y në kërkesën e ndalimit, pastaj riaktivizoni JupyterLab duke shtypur çelësin 'lart' në tastierë, për të mos e shkruar përsëri komandën dhe pastaj Enter për ta aktivizuar:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfsShkoni në faqen http://10.0.5.5:8888/lab ose rifreskoni faqen në shfletues, pastaj shkruani kodin e mëposhtëm në një qelizë të re të notebook-ut:
%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_plotJu duhet të merrni një rezultat si në imazhin më poshtë, ku IPyWidgets gjeneron një element UI në faqen që ndërvepron në mënyrë interaktive me kodin burimor, si dhe Matplotlib nxjerr rezultatin e kodit në formën e imazhit si grafik funksioni:

Shumë shembuj IPyWidgets mund të gjeni në tutoriale këtu
ĂfarĂ« tjetĂ«r? ^
Jeni tĂ« mrekullueshĂ«m, nĂ«se keni mbetur dhe arritur deri nĂ« fund tĂ« artikullit. UnĂ« me qĂ«llim nuk e publikova skriptin e gatshĂ«m nĂ« fund tĂ« artikullit qĂ« do tĂ« instalonte JupyterLab me 'njĂ« klik', pĂ«r tĂ« inkurajuar punĂ«torĂ«t đ Por ju mund ta bĂ«ni kĂ«tĂ« vetĂ«, sepse tashmĂ« e dini se si, duke mbledhur komandat nĂ« njĂ« skript Bash tĂ« vetĂ«m đ
Gjithashtu, mund të:
- Caktoni emrin e rrjetit për kontejnerin në vend të adresës IP duke e shkruar atë në një
/etc/hostsdhe në shfletues shkruani adresën http://jupyter.local:8888 - Luani me kufizimin e burimeve për kontejnerin, për këtë lexoni kapitullin në mundësitë bazike të LXD ose merrni më shumë informacion në faqen e zhvilluesit të LXD.
- Ndrysho temën:

Dhe shumë gjëra të tjera mund të bëni! Këtu është gjithçka. Ju uroj sukses!
UPDATE: 15.04.2020 18:30 â Korrigjova gabimet nĂ« kapitullin «PĂ«rshĂ«ndetje, BotĂ«!»
UPDATE: 16.04.2020 10:00 â Rregullova dhe shtova tekstin nĂ« pĂ«rshkrimin e aktivizimit tĂ« menaxherit tĂ« shtesave JupyterLab
UPDATE: 16.04.2020 10:40 â Korrigjova gabimet e gjetura nĂ« tekst dhe paksa e ndryshova pĂ«r mirĂ« kapitullin «Instalimi i softuerit bazĂ« dhe konfigurimi i sistemit»
Burimi: habr.com
