Baza sistem haqqında narahat olmamaq və kök imtiyazları ilə işləməli olan kodda bir səhv olarsa hər şeyi yıxmamaq üçün Linux-da kod və ya sistem yardımçıları ilə sınaqdan keçirmisiniz?
Bəs tutaq ki, bir maşında müxtəlif mikroservislərin bütün çoxluğunu sınamalı və ya işlətməlisən? Yüz, hətta min?
Hipervisor tərəfindən idarə olunan virtual maşınlarla bu cür problemlər həll edilə bilər və həll olunacaq, bəs nəyin bahasına? Məsələn, Alp Linux paylanmasına əsaslanan LXD-də konteyner yalnız istehlak edir 7.60MB
RAM və başlanğıcdan sonra kök bölmənin tutduğu yer 9.5MB
! Bunu necə bəyənirsən, Elon Musk? Yoxlamağı məsləhət görürəm LXD-nin əsas imkanları - Linux-da konteyner sistemi
Ümumilikdə LXD konteynerlərinin nə olduğu aydınlaşdıqdan sonra, gəlin daha da irəli gedək və düşünək ki, host üçün kodu təhlükəsiz işlədə, qrafiklər yarada, UI vidjetlərini kodunuzla dinamik (interaktiv) əlaqələndirə biləcəyiniz belə bir kombayn platforması olsaydı, necə olacaq? kodu mətnlə blackjack... formatla əlavə edin? Bir növ interaktiv blog? Vay... mən istəyirəm! İstəyin! 🙂
Bir konteynerə atacağımız pişiyin altına baxın Yupiter laboratoriyası - köhnəlmiş Jupyter Notebook əvəzinə yeni nəsil istifadəçi interfeysi və biz həmçinin Python modullarını quraşdıracağıq, məsələn saysız, Pandas, matplotlib, IPyVidjetləri yuxarıda sadalanan hər şeyi etməyə və hamısını xüsusi bir faylda - IPython noutbukunda saxlamağa imkan verəcəkdir.
Naviqasiya
- Orbital uçuş planı
- Əsas sistemin quraşdırılması və konfiqurasiyası
- Əsas proqram təminatının quraşdırılması və sistemin qurulması
- JupyterLab-ın quraşdırılması və konfiqurasiyası
- Ev sahibi ilə məlumatların paylaşılması
- Salam, Dünya!
- Python-un imkanlarının genişləndirilməsi
- JupyterLab-da modulların sınaqdan keçirilməsi
- Başqa?
Orbital uçuş planı ^
Yuxarıdakı sxemi həyata keçirməyimizi asanlaşdırmaq üçün qısa fəaliyyət planını təsvir edək:
- Dağıtım dəstinə əsaslanan konteyneri quraşdırıb işə salaq Alpin Linux. Biz bu paylamadan istifadə edəcəyik, çünki o, minimalizmə yönəlib və orada yalnız ən zəruri proqram təminatını quraşdıracaq, artıq heç nə yoxdur.
- Gəlin konteynerə əlavə virtual disk əlavə edək və ona ad verək -
hostfs
və onu kök fayl sisteminə quraşdırın. Bu disk konteynerin daxilində verilmiş kataloqdan hostda olan faylları istifadə etməyə imkan verəcək. Beləliklə, məlumatlarımız konteynerdən müstəqil olacaq. Konteyner silinərsə, məlumatlar hostda qalacaq. Həmçinin, bu sxem konteyner paylanmasının standart şəbəkə mexanizmlərindən istifadə etmədən bir çox konteynerlər arasında eyni məlumatların paylaşılması üçün faydalıdır. - Bash, sudo, lazımi kitabxanaları quraşdıraq, sistem istifadəçisini əlavə edək və konfiqurasiya edək
- Python, modulları quraşdıraq və onlar üçün binar asılılıqları tərtib edək
- Quraşdıraq və işə salaq Yupiter laboratoriyası, görünüşü fərdiləşdirin, bunun üçün uzantılar quraşdırın.
Bu yazıda konteynerin işə salınması ilə başlayacağıq, LXD-nin quraşdırılması və konfiqurasiyasını nəzərdən keçirməyəcəyik, bütün bunları başqa bir məqalədə tapa bilərsiniz - LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri.
Əsas sistemin quraşdırılması və konfiqurasiyası ^
Şəkili təyin etdiyimiz əmrlə konteyner yaradırıq - alpine3
, konteyner üçün identifikator - jupyterlab
və zəruri hallarda konfiqurasiya profilləri:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
Burada konfiqurasiya profilindən istifadə edirəm hddroot
kök bölməsi olan bir konteyner yaratmağı təyin edir Saxlama Hovuzu fiziki HDD diskində yerləşir:
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ənim sistemimdə də mövcud olan SSD diskinin resurslarına qənaət edərək HDD diskindəki konteynerlərlə sınaqdan keçirmək imkanı verir 🙂 bunun üçün ayrıca konfiqurasiya profili yaratdım. ssdroot
.
Konteyner yaradıldıqdan sonra vəziyyətdədir STOPPED
, ona görə də biz init sistemini işə salmaqla başlamalıyıq:
lxc start jupyterlab
Açardan istifadə edərək konteynerlərin siyahısını LXD-də göstərək -c
hansını göstərir columns ekranı:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
Konteyneri yaratarkən, konfiqurasiya profilindən istifadə etdiyimiz üçün IP ünvanı təsadüfi seçildi default
əvvəllər məqalədə konfiqurasiya edilmişdi LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri.
İndi cari konfiqurasiyada olduğu kimi konfiqurasiya profili səviyyəsində deyil, konteyner səviyyəsində şəbəkə interfeysi yaratmaqla bu IP ünvanını daha yaddaqalan ünvana dəyişəcəyik. Bunu etmək lazım deyil, keçə bilərsiniz.
Şəbəkə interfeysinin yaradılması eth0
keçidə bağladığımız (şəbəkə körpüsü) lxdbr0
əvvəlki məqaləyə uyğun olaraq NAT-ı işə saldıq və konteyner indi İnternetə çıxış əldə edəcək və biz də interfeysə statik IP ünvanı təyin edirik - 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 konteyner yenidən işə salınmalıdır:
lxc restart jupyterlab
Konteynerin vəziyyətinin yoxlanılması:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
Əsas proqram təminatının quraşdırılması və sistemin qurulması ^
Konteynerimizi idarə etmək üçün aşağıdakı proqramı quraşdırmalısınız:
Paketi
təsvir
bash
GNU Bourne Again qabığı
bash-tamamlama
Bash shell üçün proqramlaşdırıla bilən tamamlama
sudo
Müəyyən istifadəçilərə bəzi əmrləri kök kimi işlətmək imkanı verin
kölgə
Kölgə faylları və PAM dəstəyi ilə parol və hesab idarəetmə alətləri dəsti
tzdata
Saat qurşağı və gün işığına qənaət vaxtı datası üçün mənbələr
nano
Təkmilləşdirmələrlə Pico redaktoru klonu
Əlavə olaraq, aşağıdakı paketləri quraşdıraraq sistemin man-səhifələrində dəstəyi quraşdıra bilərsiniz - man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
İstifadə etdiyimiz əmrlərə və düymələrə baxaq:
lxc
— LXD müştərisinə zəng edinexec
- Konteynerdə əmr işlədən LXD müştəri metodujupyterlab
- Konteyner ID--
- Əlavə düymələri üçün açar kimi şərh etməməyi təyin edən xüsusi açarlxc
və simin qalan hissəsini konteynerə olduğu kimi keçirinapk
— Alp Linux paylama paketi meneceriadd
— Komandadan sonra göstərilən paketləri quraşdıran paket meneceri metodu
Sonra, sistemdə bir saat qurşağı təyin edəcəyik Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Saat qurşağını quraşdırdıqdan sonra paket tzdata
sistemdə artıq lazım deyil, yer tutacaq, ona görə də onu silək:
lxc exec jupyterlab -- apk del tzdata
Saat qurşağının yoxlanılması:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
Konteynerdə yeni istifadəçilər üçün Bash quraşdırmaq üçün çox vaxt sərf etməmək üçün aşağıdakı addımlarda hazır skel fayllarını host sistemindən ona köçürəcəyik. Bu, Bash-ı bir konteynerdə interaktiv şəkildə gözəlləşdirməyə imkan verəcəkdir. Mənim host sistemim Manjaro Linux və kopyalanan fayllardır /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
Prinsipcə onlar Alpine Linux üçün uyğundur və kritik problemlər yaratmır, lakin fərqli bir paylamaya sahib ola bilərsiniz və konteynerdə Bash-i işə salarkən bir səhv olub olmadığını müstəqil şəkildə müəyyənləşdirməlisiniz.
Skel fayllarını konteynerə kopyalayın. Açar --create-dirs
Əgər onlar mövcud deyilsə, lazımi qovluqları yaradacaq:
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 kök istifadəçi üçün konteynerə yenicə kopyalanmış skel fayllarını ev kataloquna kopyalayın:
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 istifadəçilər üçün sistem qabığını quraşdırır /bin/sh
, ilə əvəz edəcəyik root
Bash-də istifadəçi:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
O root
istifadəçi parolsuz deyildi, o, parol təyin etməlidir. Aşağıdakı əmr onun üçün yeni təsadüfi parol yaradacaq və təyin edəcək, onu icra etdikdən sonra konsol ekranında görəcəksiniz:
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
Həmçinin, yeni sistem istifadəçisi yaradaq - jupyter
bunun üçün daha sonra konfiqurasiya edəcəyik Yupiter laboratoriyası:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
Bunun üçün parol yaradaq və təyin edək:
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
Sonra, iki əmri yerinə yetirəcəyik, birincisi sistem qrupu yaradacaq sudo
, ikincisi isə ona istifadəçi əlavə edəcək jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
Baxaq görək istifadəçi hansı qruplara aiddir jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
Hər şey qaydasındadır, davam edək.
Qrupun üzvü olan bütün istifadəçilərə icazə verin sudo
əmrindən istifadə edin sudo
. Bunu etmək üçün aşağıdakı skripti işləyin, burada sed
konfiqurasiya faylında parametr xəttini şərhdən çıxarı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ı ^
Yupiter laboratoriyası Python proqramıdır, ona görə də əvvəlcə bu tərcüməçini quraşdırmalıyıq. Həmçinin, Yupiter laboratoriyası Python paket menecerindən istifadə edərək quraşdıracağıq pip
, və sistem deyil, çünki o, sistem deposunda köhnəlmiş ola bilər və buna görə də aşağıdakı paketləri quraşdıraraq onun asılılığını əl ilə həll etməliyik - 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 yeniləyək pip
cari versiyaya:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
Təyin etmək Yupiter laboratoriyası paket meneceri vasitəsilə pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
İçindəki uzantılardan bəri Yupiter laboratoriyası eksperimentaldır və rəsmi olaraq jupyterlab paketi ilə göndərilmir, ona görə də biz onu əl ilə quraşdırmalı və konfiqurasiya etməliyik.
Gəlin NodeJS və onun üçün paket menecerini - NPM-i quraşdıraq Yupiter laboratoriyası onları genişləndirmələri üçün istifadə edir:
lxc exec jupyterlab -- apk add nodejs npm
Üçün uzantılara Yupiter laboratoriyası yükləyəcəyimiz işlədi, onlar istifadəçi kataloqunda quraşdırılmalıdır, çünki proqram istifadəçidən işə salınacaq jupyter
. Problem ondadır ki, işə salma əmrində kataloqa ötürülə bilən heç bir parametr yoxdur; proqram yalnız mühit dəyişənini qəbul edir və buna görə də biz onu müəyyən etməliyik. Bunun üçün biz dəyişən ixrac əmrini yazacağıq JUPYTERLAB_DIR
istifadəçi mühitində jupyter
, sənədləşdirmək .bashrc
istifadəçi hər dəfə daxil olduqda yerinə yetirilir:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
Növbəti əmr xüsusi bir uzantı quraşdıracaq - genişləndirmə meneceri Yupiter laboratoriyası:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
İndi hər şey ilk buraxılışa hazırdır Yupiter laboratoriyası, lakin biz hələ də bir neçə faydalı uzantı quraşdıra bilərik:
toc
— Mündəricat, məqalə/dəftərdə başlıqların siyahısını yaradırjupyterlab-horizon-theme
- UI mövzusujupyterlab_neon_theme
- UI mövzusujupyterlab-ubu-theme
- Başqa biri müəllifdən mövzu bu məqalə :) Amma bu halda GitHub deposundan quraşdırma göstəriləcək
Beləliklə, bu uzantıları quraşdırmaq üçün aşağıdakı əmrləri ardıcıl olaraq yerinə yetirin:
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"
Genişləndirmələri quraşdırdıqdan sonra onları tərtib etməliyik, çünki əvvəllər quraşdırma zamanı açarı göstərdik --no-build
vaxta qənaət etmək üçün. İndi onları bir anda bir araya toplamaqla əhəmiyyətli dərəcədə sürətləndirəcəyik:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
İndi ilk dəfə işə salmaq üçün aşağıdakı iki əmri yerinə yetirin Yupiter laboratoriyası. Onu bir komanda ilə işə salmaq olardı, lakin bu zaman beyninizdə yadda saxlamaq çətin olan işə salma əmri artıq kifayət qədər əmrlərin olduğu hostda deyil, konteynerdə bash ilə yadda qalacaq. onları tarixə yazmaq :)
Konteynerə istifadəçi kimi daxil olun jupyter
:
lxc exec jupyterlab -- su -l jupyter
Sonra, qaç Yupiter laboratoriyası göstərildiyi kimi düymələr və parametrlərlə:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
Veb brauzerinizdə ünvana keçin http://10.0.5.5:8888 və açılan səhifəyə daxil olun nişan konsolda görəcəyiniz giriş. Kopyalayın və səhifəyə yapışdırın, sonra klikləyin Giriş. Daxil olduqdan sonra, aşağıdakı şəkildə göstərildiyi kimi, sol tərəfdəki genişləndirmələr menyusuna gedin, burada siz genişləndirmə menecerini aktivləşdirərkən əmrin verildiyi üçüncü tərəflərdən uzantıları quraşdıraraq təhlükəsizlik risklərini götürmək istəniləcək. JupyterLab inkişafı məsuliyyət daşımır:
Bununla belə, biz bütövlükdə təcrid edirik Yupiter laboratoriyası və onu konteynerə elə yerləşdirin ki, NodeJS-ni tələb edən və istifadə edən üçüncü tərəf uzantıları, heç olmasa, konteynerin içərisində açdığımızdan başqa diskdəki məlumatları oğurlaya bilməsin. Şəxsi sənədlərinizə hostda daxil olun /home
konteynerdəki proseslərin uğur qazanması ehtimalı azdır və əgər onlar baş verirsə, onda siz host sistemindəki fayllarda imtiyazlara malik olmalısınız, çünki biz konteyneri işə salırıq. imtiyazsız rejim. Bu məlumatlara əsaslanaraq, genişləndirmələrin daxil edilməsi riskini qiymətləndirə bilərsiniz Yupiter laboratoriyası.
Yaradılmış IPython noutbukları (səhifələr Yupiter laboratoriyası) indi istifadəçinin ev kataloqunda yaradılacaq - /home/jupyter
, lakin planlarımız məlumatı (paylaşmanı) host və konteyner arasında bölməkdir, ona görə də konsola qayıdın və dayanın Yupiter laboratoriyası isti düyməni yerinə yetirməklə - CTRL+C
və cavab verir y
xahişi ilə. Sonra istifadəçinin interaktiv sessiyasını dayandırın jupyter
isti düyməni tamamlayır CTRL+D
.
Ev sahibi ilə məlumatların paylaşılması ^
Məlumatları host ilə bölüşmək üçün konteynerdə bunu etməyə imkan verən bir cihaz yaratmalı və bunu etmək üçün aşağıdakı düymələri təyin etdiyimiz aşağıdakı əmri işlətməlisiniz:
lxc config device add
— Komanda cihaz konfiqurasiyasını əlavə edirjupyter
— konfiqurasiyanın əlavə olunduğu konteynerin ID-sihostfs
— Cihaz ID. İstənilən ad təyin edə bilərsiniz.disk
— Cihazın növü göstərilirpath
— LXD-nin bu cihazı quraşdıracağı konteynerdəki yolu müəyyən edirsource
— Konteynerlə bölüşmək istədiyiniz mənbəni, hostda qovluğa gedən yolu göstərin. Seçimlərinizə uyğun olaraq yolu təyin edin
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
Kataloq üçün /home/dv/projects/ipython-notebooks
icazə hazırda UID-ə bərabər olan konteyner istifadəçisinə təyin edilməlidir SubUID + UID
, bölməsinə baxın Təhlükəsizlik. Konteyner İmtiyazları məqalədə LXD-nin əsas xüsusiyyətləri - Linux konteyner sistemləri.
Sahibinin konteyner istifadəçisi olacağı hostda icazəni təyin edin jupyter
, və dəyişən $USER
host istifadəçinizi qrup olaraq təyin edəcək:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
Salam, Dünya! ^
Əgər siz hələ də konteynırda açıq konsol seansınız varsa Yupiter laboratoriyası, sonra onu yeni açarla yenidən başladın --notebook-dir
dəyəri təyin etməklə /mnt/hostfs
əvvəlki addımda yaratdığımız cihaz üçün konteynerdəki noutbukların kökünə gedən yol kimi:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Sonra səhifəyə keçin http://10.0.5.5:8888 və aşağıdakı şəkildə göstərildiyi kimi səhifədəki düyməni sıxaraq ilk noutbukunuzu yaradın:
Sonra səhifədəki sahəyə klassiki göstərəcək Python kodunu daxil edin Hello World!
. Daxil etməyi bitirdikdən sonra basın CTRL+ENTER
və ya JupyterLab-ın bunu etməsi üçün yuxarıdakı alətlər panelindəki "oyun" düyməsi:
Bu nöqtədə, demək olar ki, hər şey istifadəyə hazırdır, lakin Python-un standart imkanlarını əhəmiyyətli dərəcədə genişləndirə bilən əlavə Python modullarını (tam hüquqlu proqramlar) quraşdırmasaq, bu maraqsız olacaq. Yupiter laboratoriyası, ona görə də davam edək :)
PS Maraqlısı odur ki, köhnə tətbiq Yupiter kod adı altında Jupyter noutbuku getməmişdir və paralel olaraq mövcuddur Yupiter laboratoriyası. Köhnə versiyaya keçmək üçün ünvana şəkilçi əlavə etməklə keçidi izləyin/tree
, yeni varianta keçid isə şəkilçi ilə həyata keçirilir /lab
, lakin müəyyən edilməli deyil:
- Jupyter Notebook - http://10.0.5.5:8888/tree
- Jupyter Laboratoriyası - http://10.0.5.5:8888/lab
Python-un imkanlarının genişləndirilməsi ^
Bu bölmədə, kimi güclü Python dil modullarını quraşdıracağıq saysız, Pandas, matplotlib, IPyVidjetləri nəticələri noutbuklara inteqrasiya olunur Yupiter laboratoriyası.
Siyahıda göstərilən Python modullarını paket meneceri vasitəsilə quraşdırmadan əvvəl pip
əvvəlcə Alpine Linux-da sistem asılılıqlarını həll etməliyik:
g++
— Modulların tərtibi üçün lazımdır, çünki onların bəziləri dildə həyata keçirilir C + + və ikili modullar kimi iş vaxtında Python-a qoşulunfreetype-dev
- Python modulundan asılılıq matplotlib
Asılılıqların quraşdırılması:
lxc exec jupyterlab -- apk add g++ freetype-dev
Bir problem var: Alpine Linux paylanmasının hazırkı vəziyyətində NumPy-nin yeni versiyasını tərtib etmək mümkün olmayacaq; mənim həll edə bilmədiyim bir kompilyasiya xətası görünəcək:
ERROR: PEP 517 istifadə edən və birbaşa quraşdırıla bilməyən numpy üçün təkərlər tikilə bilmədi
Buna görə də, bu modulu artıq tərtib edilmiş versiyanı paylayan, lakin hazırda saytda mövcud olandan bir qədər köhnə olan sistem paketi kimi quraşdıracağıq:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
Sonra, paket meneceri vasitəsilə Python modullarını quraşdırın pip
. Zəhmət olmasa səbirli olun, çünki bəzi modullar tərtib olunacaq və bir neçə dəqiqə çəkə bilər. Mənim maşınımda tərtib ~15 dəqiqə çəkdi:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
Quraşdırma önbelleğinin təmizlənməsi:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
JupyterLab-da modulların sınaqdan keçirilməsi ^
Əgər qaçırsınızsa Yupiter laboratoriyası, onu yenidən başladın ki, yeni quraşdırılmış modullar aktiv olsun. Bunu etmək üçün konsol seansında klikləyin CTRL+C
Harada işlədirsən və daxil ol y
sorğunu dayandırmaq və sonra yenidən başlamaq üçün Yupiter laboratoriyası əmri təkrar-təkrar daxil etməmək üçün klaviaturada yuxarı oxu sıxaraq Enter
başlamaq üçün:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Səhifəyə keçin http://10.0.5.5:8888/lab və ya brauzerinizdə səhifəni yeniləyin və sonra yeni notebook xanasına aşağıdakı kodu 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
Aşağıdakı şəkildəki kimi bir nəticə əldə etməlisiniz, harada IPyVidjetləri səhifədə mənbə kodu ilə interaktiv əlaqədə olan UI elementi yaradır və həmçinin matplotlib kodun nəticəsini funksiya qrafiki kimi şəkil şəklində göstərir:
Çoxlu nümunələr IPyVidjetləri dərsliklərdə tapa bilərsiniz burada
Başqa? ^
Qalıb məqalənin sonuna çatsanız yaxşı. Məqalənin sonunda quraşdırılacaq hazır ssenarini bilərəkdən yerləşdirmədim Yupiter laboratoriyası işçiləri həvəsləndirmək üçün "bir kliklə" :) Ancaq bunu özünüz edə bilərsiniz, çünki əmrləri bir Bash skriptində topladığınız üçün necə edəcəyinizi artıq bilirsiniz :)
Siz də edə bilərsiniz:
- Konteyner üçün sadə bir şəkildə yazaraq IP ünvanı əvəzinə şəbəkə adını təyin edin
/etc/hosts
və ünvanı brauzerdə yazın http://jupyter.local:8888 - Konteyner üçün resurs limiti ilə oynayın, bunun üçün bölməni oxuyun əsas LXD imkanları və ya LXD developer saytında daha çox məlumat əldə edin.
- Mövzunu dəyişdirin:
Və daha çoxunu edə bilərsiniz! Hamısı budur. Sənə uğurlar arzu edirəm!
YENİLƏNİB: 15.04.2020/18/30 XNUMX:XNUMX - “Salam, Dünya!” Bölməsindəki səhvlər düzəldildi.
YENİLƏMƏ: 16.04.2020/10/00 XNUMX:XNUMX — Uzatma menecerinin aktivləşdirilməsinin təsvirində düzəliş edilmiş və əlavə edilmiş mətn Yupiter laboratoriyası
YENİLƏNİB: 16.04.2020/10/40 XNUMX:XNUMX — Mətndə aşkar edilmiş səhvlər düzəldildi və “Əsas proqram təminatının quraşdırılması və sistemin qurulması” bölməsi yaxşılığa doğru bir qədər dəyişdirildi.
Mənbə: www.habr.com