Kodu və ya sistem utilitlərini Linux-da əsas sistemi qorxmadan və root imtiyazları ilə çalışması lazım olan kod səhvi baş verərsə, hər şeyi yerindən çıxartmadan sınaqdan keçirmək lazım gəldimi?
Bəs, məsələn, bir maşında müxtəlif mikroservislərin bütöv bir klasterini test etmək və ya işə salmaq lazım gələrsə necə olur? Yüz və ya hətta min?
İdarə edilən hipervizorlar ilə virtual maşınlarla bu cür işləri həll etmək mümkündür, amma bunun nə qiyməti var? Məsələn, Alpine Linux dağıtımının əsaslı bir konteyneri minimum 7.60MB RAM istifadə edir, və buradan başladıqdan sonra kök bölmə yalnız 9.5MByeyir! Bəs sənə bu necədir, Elon Musk? LXD-nin birinci dərəcəli imkanları ilə tanış olmağı tövsiyə edirəm — Linux-da konteyner sistemləri
Konteynerlərin LXD nə olduğuna dair aydınlaşdıqdan sonra daha irəliləyək və əgər bir platforma-kombayn olsaydı, burada host üçün təhlükəsiz kod icra edə bilər, qrafiklər yarada bilər, UI-widgetlərınızı kodunuzla dinamik (interaktiv) bağlaya bilər, kodunuza blackjack ilə mətni əlavə edə bilərdiniz... formatlama? İntəaktiv bloq kimi bir şey? Vau... İstəyirəm! İstəyirəm! 🙂
Konteynerdə işə salacağımız JupyterLab’ı gizli bölməyə çıxarın JupyterLab köhnəlmiş Jupyter Notebook-un əvəzi yeni nəsil istifadəçi interfeysidir, həmçinin aşağıdakı Python modullarını quraşdıracağıq: NumPy, Pandas, Matplotlib, IPyWidgets bu, yuxarıda sadalanan bütün şeyləri həyata keçirmək və bunları xüsusi bir faylda — IPython-notbukunda saxlamağa imkan verəcək.

Navigasiya
- Orbitaya qalxma planı
- Əsas sistemin quraşdırılması və konfiqurasiyası
- Əsas proqram təminatının quraşdırılması və sistemin konfiqurasiyası
- JupyterLab'ın quraşdırılması və konfiqurasiyası
- Host ilə məlumatları bölüşmək
- Salam, Dünya!
- Python imkanlarını genişləndiririk
- JupyterLab'da modulları test edirik
- Başqa nə?
Orbitaya qalxma planı ^

Yuxarıda göstərilən sxemi həyata keçirmək üçün qısa bir plan tərtib edək:
- Alpine Linux-də bir konteyner quraşdırıb işə salacağıq. Alpine Linux. Bu dağıtımı minimalizmə yönəlmiş olduğu üçün istifadə edəcəyik və yalnız ən vacib proqramları quraşdıracağıq, heç bir əlavə şey yoxdur.
- Konteynerdə bir əlavə virtual disk əlavə edəcəyik, ona ad verəcəyik —
hostfsvə onu kök FS-yə montaj edəcəyik. Bu disk, konteynerin içindəki müəyyən bir kataloqdan hostda olan faylları istifadə etməyə imkan verəcək. Bu şəkildə məlumatlarımız konteynerdən asılı olmayacaq. Kodeyner silindiyi halda, məlumatlar hostda qalacaq. Həmçinin, bu sxem, bir çox konteyner arasında eyni məlumatları standart şəbəkə mexanizmlərindən istifadə etmədən bölüşmək üçün faydalıdır. - Bash, sudo, lazımi kitabxanaları quraşdıracaq, sistem istifadəçisini əlavə edəcək və konfiqurasiya edəcəyik
- Python'u quraşdıracaq, modulları quraşdıracaq və onların ikili asılılıqlarını tərtib edəcəyik
- Quraşdıracaq və işə salacağıq JupyterLab, görünüşünü tənzimləyəcəyik, ona uzantılar quracağıq.
Bu məqalədə konteyneri işə salmaqdan başlayacağıq, LXD-in quraşdırılması və konfiqurasiyasını nəzərdən keçirməyəcəyik, bunun hamısını başqa bir məqalədə tapa bilərsiniz — LXD-in əsas imkanları — Linux-da konteyner sistemidir.
Əsas sistemin quraşdırılması və konfiqurasiyası ^
Konteyner yaratmaq üçün aşağıdakı əmri istifadə edəcəyik, burada imkanı göstərəcəyik — alpine3, konteyner üçün identifikator — jupyterlab və lazım olduqda konfiqurasiya profilləri:
lxc init alpine3 jupyterlab --profile=default --profile=hddrootBurada konfiqurasiya profilini istifadə edirəm hddroot bu, konteynerin kök hissəsini yaratmağı göstərir Saxlama İçi fiziki HDD diskinə yerləşdirilməsi:
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:
- noneBu, mənə HDD diskdə konteynerlərlə eksperiment etməyə imkan verir, həmçinin SSD diskinin resurslarını qənaət edir ki, bu da sistemimdə var 🙂 mənim üçün ayrı bir konfiqurasiya profili yaradılmışdır. ssdroot.
Konteyner yaradıldıqdan sonra o, vəziyyətdədir DAYANAN, buna görə onu başlatmalıyıq, içində init-sistemini işə salmalıyıq:
lxc start jupyterlabLXD-də konteynerlərin siyahısını təqdim edəcəyik, istifadə edərək açar -c hansının ekrana çıxarılacağını göstərir: clxc list -c ns4b +------------+---------+-------------------+--------------+ | ADI | VƏZİYYƏT | IPV4 | SAXLAMA İÇİ | +------------+---------+-------------------+--------------+ | jupyterlab | İŞLƏYİR | 10.0.5.198 (eth0) | hddpool | +------------+---------+-------------------+--------------+
Konteyner yaradılarkən IP adresi təsadüfi olaraq seçildi, çünki biz konfiqurasiya profilini istifadə etdikdefault default bu, məqalədə daha əvvəl konfiqurasiya olunmuşdu LXD-in əsas imkanları — Linux-da konteyner sistemidir.
Bu IP ünvanını daha yadda qalan etmək üçün, şəbəkə interfeysini konteyner səviyyəsində, hazırkı konfiqurasiyada olduğu kimi, konfiqurasiya profili səviyyəsində, yarada bilərik. bunu etmək mütləq deyil, bunu atlaya bilərsiniz.
Şəbəkə interfeysi yaradın eth0 hansı ki, onu switch (şəbəkə körpüsü) ilə birləşdirəcəyik lxdbr0 bu da NAT-ı keçən məqalədə aktivləşdirdik və konteyner indi İnternete çıxış əldə edəcək, eyni zamanda interfeysin statik IP ünvanı təyin edəcəyik — 10.0.5.5:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5Cihaz əlavə edildikdən sonra, konteyneri yenidən başlatmaq lazımdır:
lxc restart jupyterlabKonteynerin vəziyyətini yoxlayırıq:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| ADI | VƏZİYYƏT | IPV4 | SAXLAMA İÇİ |
+------------+---------+------------------+--------------+
| jupyterlab | İŞLƏYİR | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+Əsas proqram təminatının quraşdırılması və sistemin konfiqurasiyası ^
Konteynerimizi idarə etmək üçün aşağıdakı proqramları quraşdırmaq lazımdır:
Paket
Təsvir
bash
GNU Bourne Yenidən Shell
bash-completion
bash shell üçün proqramlaşdırılan tamamlanma
sudo
Bəzi istifadəçilərə kök istifadəçisi kimi bəzi əmrəri run etməyə icazə verir
shadow
Şəxsiyyət və hesab idarəetmə alətləri paketi, kölgə faylları və PAM dəstəyi ilə
tzdata
Vaxt zonası və gündüz vaxtının saxlanması üçün mənbələr
nano
Pico redaktoru klonu ilə genişləndirmələrlə
Əlavə olaraq, man-pages sistemində dəstəyi qura bilmək üçün aşağıdakı paketləri qura bilərsiniz — man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nanoİndi istifadə etdiyimiz komandaları və açarları nəzərdən keçirək:
lxc— LXD müştəri çağırışıexec— LXD müştərinin konteynerdə komanda işə salma metodudurjupyterlab— Konteynerin identifikatoru--— İstisna açar, daha sonra açarları açar kimi təfsir etməməsi üçün işarə edirlxcvə qalan bütün sətiri olduğu kimi konteynerə göndərirapk— Alpine Linux dağıtımının paket meneceriadd— Paketi quraşdıran paket menecerinin metodu, komanda ardınca verilən paketləri quraşdırır
Daha sonra sistemə zaman zonasını quraşdıraq Europe/Moscow:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtimeZaman zonasını quraşdırdıqdan sonra, paket tzdata sistemdə artıq lazım deyil, yer tutacağı üçün siləcəyik:
lxc exec jupyterlab -- apk del tzdataZaman zonasını yoxlayırıq:
lxc exec jupyterlab -- date
Çr Apr 15 10:49:56 MSK 2020Yeni istifadəçilərin konteynerdə Bash'ını konfiqurasiya etməyə çox vaxt sərf etməmək üçün, aşağıdakı addımlarla, onları host sistemindən hazır skel fayllarını kopyalayacağıq. Bu, konteynerdə interaktiv rejimdə Bash'ı gözəlləşdirməyə imkan verəcək. Mənim ev sahibi sistemim — Manjaro Linux'dır və kopyalanan fayllar /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors əsasında Alpine Linux üçün uyğundur və kritik problemlər yaratmır, lakin sizdə başqa bir dağıtım olabilir və siz konteynerdə işə düşəcək səhvləri özünüz müzakirə etməlisiniz.
Konteynerə skel fayllarını kopyalayırıq. Açar --create-dirs tələb olunan qovluqları yaradır, əgər onlar mövcud deyilsə:
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_colorsMövcud root istifadəçisi üçün konteynerdə yeni kopyalanmış skel fayllarını ev direktoriyaya kopyalayırıq:
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_colorsAlpine Linux'da istifadəçilər üçün sistem qabığı quraşdırılır, /bin/shbiz onu root istifadəçidə Bash ilə əvəz edəcəyik:
lxc exec jupyterlab -- usermod --shell=/bin/bash rootİstifadəçi parolsuz olmaması üçün, ona bir şifrə quraşdırmalıdır. Aşağıdakı komanda ona yeni təsadüfi bir şifrə yaradır və quraşdırır ki, bunu konsolda icra etdikdən sonra görəcəksiniz: root lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "root:$PASSWD" | chpasswd && echo "Yeni Şifrə: $PASSWD""Yeni Şifrə: sFiXEvBswuWA
Həmçinin, yeni bir sistem istifadəçisi —jupyter yaradaq ki, daha sonra onun üçün lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter JupyterLab:
Şifrə yaradaq və quraşdıraq:lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "jupyter:$PASSWD" | chpasswd && echo "Yeni Şifrə: $PASSWD""Yeni Şifrə: ZIcbzWrF8tki
Daha sonra iki əmri icra edəcəyik, birincisi sistem qrupunu yaradacaq,ikincisi onu qrupa əlavə edəcək. sudo, və ikinci istifadəçini əlavə edəcək yaradaq ki, daha sonra onun üçün:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyterİstifadəçini hansı qruplara daxil olduğunu görə bilərik yaradaq ki, daha sonra onun üçün:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudoHər şey yerindədir, davam edirik.
Bu qrupa daxil olan bütün istifadəçilərə sudo komandanı istifadə etməyə icazə verək sudo. Bunun üçün aşağıdakı skripti icra edin, burada sed konfiqurasiya faylındakı parametrin sətirini açır /etc/sudoers:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*// ' /etc/sudoers"JupyterLab'ın quraşdırılması və konfiqurasiyası ^
JupyterLab — bu Python tətbiqidir, ona görə də əvvəlcə bu interpretatoru quraşdırmalıyıq. Həmçinin, JupyterLab biz Python paket menecerindən istifadə edərək quraşdıracağıq pip, sistemdən deyil, çünki sistem deposunda köhnəlmiş ola bilər, bu səbəbdən biz ona görə asılılıqları əl ilə icazə verməliyik, bunları quraşdıraraq — python3 python3-dev gcc libc-dev zeromq-dev:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-devpython modullarını və paket menecerini pip əsas versiyaya yeniləyək:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheelQuraşdırırıq JupyterLab paket meneceri vasitəsilə pip:
lxc exec jupyterlab -- python3 -m pip install jupyterlabÇünki uzantılar JupyterLab eksperimentaldır və rəsmi olaraq jupyterlab paketi ilə birlikdə verilməyib, ona görə də bunu əl ilə quraşdırmalı və konfiqurasiya etməliyik.
NodeJS və onun üçün paket menecerini — NPM quraşdıraq, çünki JupyterLab uzantıları üçün istifadə edir:
lxc exec jupyterlab -- apk add nodejs npmQuraşdırdığımız uzantıların işləməsi üçün onları istifadəçi direktoriya yerləşdirmək lazımdır, çünki tətbiq istifadəçi tərəfindən işə salınacaq JupyterLab . Problem ondadır ki, tətbiqi işə salma komandasında bir kataloq ötürmək üçün parametr yoxdur, tətbiq yalnız ətraf mühit dəyişənini qəbul edir və ona görə də onu müəyyənləşdirməliyik. Bunun üçün ətraf mühit dəyişənini ixrac etmə komandası yazacağıq yaradaq ki, daha sonra onun üçünJUPYTERLAB_DIR istifadəçi mühitində , fayl yaradaq ki, daha sonra onun üçün.bashrc , bu fayl istifadəçi sistemə daxil olduqda hər dəfə icra olunur:lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
Növbəti komandada isə xüsusi bir uzantı quraşdıracağıq — uzantılar idarəçisilxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager" JupyterLab:
İndi artıq ilk işə salma üçün hazırlıq tamamdır, amma əlavə bir neçə faydalı uzantı da quraşdıra bilərik: JupyterLabtoc
— Məzmun cədvəli, yazı/notbukda başlıqların siyahısını yaradırjupyterlab-horizon-theme— UI üçün temajupyterlab_neon_themejupyterlab-ubu-themejupyterlab_neon_theme— Hələ birbu məqalənin müəllifindən 🙂 Amma bu halda, GitHub deposundan quraşdırma göstəriləcək Beləliklə, bu uzantıları quraşdırmaq üçün ardıcıl olaraq aşağıdakı komandaları icra edin:
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 "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"Uzantıları quraşdırdıqdan sonra onları tərtib etməliyik, çünki daha əvvəl quraşdırma zamanı açar göstərmişdi --no-build vaxta qənaət etmək üçün. İndi, onları bir dəfəlik tərtib etməklə xeyli sürətlənəcəyik:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"İndi ilk işə salma üçün aşağıdakı iki əmri yerinə yetirin JupyterLab. Bunu bir komanda ilə başlada bilərdik, amma bu halda, xatırlamaqda çətinlik yaranan başlatma əmri konteynerdə bash tərəfindən yadda saxlanacaq, ev sahibi sistemdə isə artıq tarixçəyə yazılmaq üçün kifayət qədər komanda var 🙂
Konteynerdə istifadəçi kimi daxil olun yaradaq ki, daha sonra onun üçün:
lxc exec jupyterlab -- su -l jupyterSonra aşağıdakı açar və parametrlərlə başlada bilərsiniz: JupyterLab açarlar və parametrlərlə olduğu kimi:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browserVeb brauzerinizdə bu ünvana keçin http://10.0.5.5:8888 və açılan səhifədə daxil edin token konsolda görəcəyiniz giriş. Onu kopyalayın və səhifəyə yerləşdirin, sonra Daxil olunbasın. Daxil olduqdan sonra, solda uzantılar menyusuna keçin, aşağıdakı şəkildə göstərildiyi kimi, burada sizə uzantı menecerinin aktivləşdirilməsində üçüncü tərəf uzantıları quraşdırarkən təhlükəsizlik risklərini qəbul etməyinizi təklif edilir, bunun üçün komandalar JupyterLab development məsuliyyət daşımır:

Amma biz tamamilə bunu izolyasiya edirik JupyterLab və onu bir konteynerə qoyuruq ki, NodeJS tələb edən və istifadə edən üçüncü tərəf uzantıları ən azından disk üzərində məlumatları oğurlaya bilməsinlər, yalnız konteyner daxilində açacağımız məlumatlara girişi olsun. Konteynerdən sizin şəxsi sənədlərinizə çatmaq çətin olacaq, əgər mümkündürsə, bunun üçün ev sahibi sistemdəki fayllara riayət etmə səlahiyyətinə sahib olmalısınız, çünki konteyneri /home başqa bir rejimdə işə salırıq. İnformasiya buna əsaslanaraq siz uzantıları aktivləşdirmə riskini qiymətləndirə bilərsiniz.Yaradılmış IPython notebook-ları (səhifələr) JupyterLab.
indi istifadəçinin ev dizinində yaradılacaq — JupyterLab, amma bizim planlarımız arasında məlumatları (paylaşmaq) ev sahibi ilə konteyner arasında bölüşmək var, buna görə konsola geri dönün və /home/jupyterstop edin JupyterLab CTRL+C hotkey-i ilə və sorğuya y cavab verin. Sonra istifadəçi ilə interaktiv sessiyanı CTRL+D hotkey-i ilə kəsin. yaradaq ki, daha sonra onun üçün Evdar ilə məlumatları bölüşmək üçün konteynirdə bunu etməyə imkan verən bir cihaz yaradılmalıdır, və bunun üçün aşağıdakı əmri yerinə yetirin, burada biz aşağıdakı açarları göstəririk: lxc config device add.
Host ilə məlumatları bölüşmək ^
— Bu əmrlə cihaz konfiqurasiyası əlavə olunur.
— Daxil edilən konfiqrasiyanın konteynerin identifikatoru.— Cihazın identifikatoru. İstədiyiniz hər hansı bir adı təyin edə bilərsiniz.yaradaq ki, daha sonra onun üçündiskhostfs— Cihazın tipini göstərir.path— Cihazın növü göstəriliryol— Bu, LXD-nin bu cihazı mount edəcəyi konteynerdəki yolu göstərirmənbə— Bu, konteynerlə paylaşmaq istədiyiniz hostdakı kataloq üçün yolu göstərir. Özünüzə uyğun olan yolu göstərin
lxc config device add jupyterlab hostfs disk path=\/mnt\/hostfs source=\/home\/dv\/projects\/ipython-notebooksKataloq üçün /home/dv/projects/ipython-notebooks konteyner istifadəçisinin indiki UID-yə bərabər icazə almasına ehtiyac var SubUID + UID, baxın bölməyə Təhlükəsizlik. Konteynerlərin Privilegiyaları məqalədə LXD-in əsas imkanları — Linux-da konteyner sistemidir.
Konteyner istifadəçisinin sahibi olacağı hostda icazəni təyin edirik yaradaq ki, daha sonra onun üçün, və dəyişən $USER sizi qrup olaraq host istifadəçiniz kimi göstərəcək:
sudo chown 1001000:$USER \/home\/dv\/projects\/ipython-notebooksSalam, Dünya! ^
Əgər konteynerdəki konsol sessiyanız hələ açıqdırsa JupyterLab, yeni açarla onu yenidən başladın --notebook-dir bu cür, əvvəlki addımda yaratdığımız cihaz üçün notbukların kökünü yol olaraq təyin edərək: /mnt/hostfs jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=\/mnt\/hostfs
Sonra səhifəyə keçinvə aşağıdakı şəkildən göstərilən düyməni basaraq ilk notbukunuzu yaradın: http://10.0.5.5:8888 Sonra səhifədəki mətbəxdə klassik bir Python dilində kod yazın ki, bu da

çıxış versin. Daxil etməni bitirdikdən sonra Salam Dünya!CTRL+ENTER və ya JupyterLab-ın yuxarıdakı alət panelindəki «play» düyməsini basın ki, bu da bunu həyata keçirsin: Bütün bunlar istifadəyə hazırdır, amma əgər əlavə Python-modulları (tam funksional proqramlar) quraşdırmasaq, maraqlı olmayacaq

, buna görə irəliləyək 🙂 JupyterLabP.S. Maraqlıdır ki, köhnə versiya
Jupyter kod adı ilə nümunə olaraq mövcuddur və o, ilə paralel olaraq yaşayır. Jupyter Notebook Köhnə versiyaya keçmək üçün linki açaraq URL-ə sufiks əlavə edin JupyterLab, yeni versiyaya keçmək üçün isə sufiks əlavə olunur/tree, lakin onu göstərmək mütləq deyil: /labJupyter Notebook —
- Jupyter Lab — http://10.0.5.5:8888/tree
- Bu bölmədə Python dilinin bu cür güclü modullarını quraşdıracağıq ki, bu da http://10.0.5.5:8888/lab
Python imkanlarını genişləndiririk ^
notbuklara inteqrasiya olunacaq NumPy, Pandas, Matplotlib, IPyWidgets Python paket meneceri vasitəsilə yerləşdirmədən əvvəl JupyterLab.
sistem asılılıqlarını əvvəlcə Alpine Linux-da icazə verməliyik: pip g++
— Modulları tərtib etmək üçün lazımdır, çünki onların bəziləriC++ dilində yazılıb və aşağıda Python ilə işə salınır freetype-dev— Python modulu üçün asılılıqdırAsılılıqları quraşdırırıq: Matplotlib
lxc exec jupyterlab -- apk add g++ freetype-dev
Hal-hazırda Alpine Linux dağıtımının vəziyyəti ilə yeni versiyanı NumPy-ni tərtib etmək mümkün deyil, kompilasiya xətası baş verəcək ki, onu düzəldə bilmədim:XƏTA
: NumPy üçün PEP 517 istifadə edən təkilləri yarada bilmədik və bu da birbaşa quraşdırıla bilmirBuna görə, bu modulu sistem paketi olaraq quraşdıracağıq ki, artıq tərtib edilmiş versiya, lakin indiki zamanda rəsmi saytdan daha köhnədir:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-devDaha sonra Python modullarını paket meneceri ilə quraşdırırıq pip. Bir az səbirli olun, çünki bəzi modullar tərtib ediləcək və bu bir neçə dəqiqə çəkəcək. Mənim maşınımda tərtibat ~15 dəqiqə sürdü:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlibQuraşdırma keşi təmizlənir:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*JupyterLab'da modulları test edirik ^
Əgər sizdə bu işə salınıbsa JupyterLab, onu yenidən başladın ki, yeni quraşdırılmış modullar aktiv olsun. Bunun üçün konsol sessiyasında basın və sorğuya hansında işə salınıbsa və yazın cavab verin. Sonra istifadəçi ilə interaktiv sessiyanı dayandırma sorğusuna, sonra onu yenidən işə salın JupyterLab klaviaturadakı «yuxarı» oxunu basaraq, komandaları yenidən daxil etmədən Enter işə salmaq üçün:
Sonra səhifəyə keçinSayta keçid edin http://10.0.5.5:8888/lab və ya brauzerdə səhifəni yeniləyin, sonra aşağıdakı kodu notebook-da yeni bir hüceyrəyə daxil edin:
%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_plotSiz aşağıdakı şəkil kimi bir nəticə əldə etməlisiniz, burada IPyWidgets səhifədə UI elementi yaradır ki, bu da interaktiv şəkildə əsas kodla qarşılıqlı əlaqə yaradır, eyni zamanda Matplotlib kodun nəticəsini şəkil kimi funksiya qrafiki şəklində göstərir:

Çox sayda nümunə IPyWidgets tutoriallarda tapa bilərsiniz burada
Başqa nə? ^
Siz, bu məqalənin sonuna qədər qaldığınız üçün yaxşısınız. Mən xüsusi olaraq kodu sona yerləşdirmədim JupyterLab «bir klik» ilə quraşdırmaq üçün, əziyyət çəkənləri təşviq etmək üçün 🙂 Amma siz bunu özünüz edə bilərsiniz, çünki artıq necə olduğunu bilirsiniz, bütün komandaları bir yerdə Bash skripti olaraq toplamağa 🙂
Həmçinin, siz:
- Konteyner üçün IP ünvanı əvəzinə şəbəkə adı təyin edə bilərsiniz, bunu sadə bir yerdə qeyd edərək
/etc/hostsvə brauzerdə http://jupyter.local:8888 - Konteynerin resurs məhdudiyyətləri ilə oynaya bilərsiniz, bunu etmək üçün LXD-nin əsas imkanları haqqında bölməni oxuyun və ya LXD inkişaf etdiricisinin saytında daha çox məlumat əldə edin.
- Dizayn temasını dəyişmək:

Və hələ də edə biləcəyiniz çox şey var! Hamsı bu qədər. Sizə uğurlar arzulayıram!
YENİLƏNİB: 15.04.2020 18:30 — «Hello, World!» bölməsindəki xətaları düzəltdim
YENİLƏNİB: 16.04.2020 10:00 — Uzantı menecerinin aktivləşdirilməsi təsvirini düzəltdim və əlavə etdim JupyterLab
YENİLƏNİB: 16.04.2020 10:40 — Mətn içərisindəki tapılmış xətaları düzəltdim və «Əsas proqram təminatının quraşdırılması və sistemin tənzimlənməsi» bölməsini bir az yaxşılaşdırdım
Mənbə: habr.com
