Jupyter'i LXD orbitasına başlatırıq

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.

Jupyter'i LXD orbitasına başlatırıq

Orbitaya qalxma planı ^

Jupyter'i LXD orbitasına başlatırıq

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 — hostfs və 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=hddroot

Burada 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:
- none

Bu, 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 jupyterlab

LXD-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ə etdik

default 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.5

Cihaz əlavə edildikdən sonra, konteyneri yenidən başlatmaq lazımdır:

lxc restart jupyterlab

Konteynerin 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 metodudur
  • jupyterlab — Konteynerin identifikatoru
  • -- — İstisna açar, daha sonra açarları açar kimi təfsir etməməsi üçün işarə edir lxc və qalan bütün sətiri olduğu kimi konteynerə göndərir
  • apk — Alpine Linux dağıtımının paket meneceri
  • add — 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/localtime

Zaman 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 tzdata

Zaman zonasını yoxlayırıq:

lxc exec jupyterlab -- date

Çr Apr 15 10:49:56 MSK 2020

Yeni 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_colors

Mö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_colors

Alpine 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 sudo

Hə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-dev

python modullarını və paket menecerini pip əsas versiyaya yeniləyək:

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

Quraş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 npm

Quraş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əçisi

lxc 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ır jupyterlab-horizon-theme
  • — UI üçün tema jupyterlab_neon_theme
  • jupyterlab-ubu-theme jupyterlab_neon_theme
  • — Hələ bir bu 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 jupyter

Sonra 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-browser

Veb 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:

Jupyter'i LXD orbitasına başlatırıq

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 üçün disk
  • hostfs — Cihazın tipini göstərir.
  • path — Cihazın növü göstərilir
  • yol — Bu, LXD-nin bu cihazı mount edəcəyi konteynerdəki yolu göstərir
  • mə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-notebooks

Kataloq üçü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-notebooks

Salam, 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çin

və 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

Jupyter'i LXD orbitasına başlatırıq

çı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

Jupyter'i LXD orbitasına başlatırıq

, 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 —

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əri C++ dilində yazılıb və aşağıda Python ilə işə salınır freetype-dev
  • — Python modulu üçün asılılıqdır Ası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-dev

Daha 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 matplotlib

Quraş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çin

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

Siz 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:

Jupyter'i LXD orbitasına başlatırıq

Ç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/hosts və 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:

Jupyter'i LXD orbitasına başlatırıq

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

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster