Сар додани Jupyter ба мадори LXD

Оё шумо ягон бор маҷбур шудаед, ки бо код ё утилитаҳои системавӣ дар Linux озмоиш кунед, то дар бораи системаи асосӣ хавотир нашавед ва дар сурати хатогӣ дар код, ки бояд бо имтиёзҳои реша кор кунад, ҳама чизро вайрон накунед?

Аммо дар бораи он чӣ гуфтан мумкин аст, ки биёед бигӯем, ки ба шумо лозим аст, ки кластери тамоми микросервисҳои гуногунро дар як мошин санҷед ё иҷро кунед? Сад ё ҳатто ҳазор?

Бо мошинҳои виртуалӣ, ки аз ҷониби гипервизор идора карда мешаванд, чунин мушкилот метавонанд ҳал карда шаванд ва ҳал карда мешаванд, аммо бо кадом арзиш? Масалан, контейнер дар LXD дар асоси тақсимоти Alpine Linux танҳо истеъмол мекунад 7.60MB RAM, ва он ҷое ки қисмати реша пас аз оғозёбиро ишғол мекунад 9.5MB! Ин ба шумо чӣ гуна маъқул аст, Илон Маск? Ман тавсия медиҳам, ки тафтиш кунед имкониятҳои асосии LXD - системаи контейнерӣ дар Linux

Пас аз он ки дар маҷмӯъ маълум шуд, ки контейнерҳои LXD чистанд, биёед минбаъд равем ва фикр кунем, ки агар чунин платформаи комбайн мавҷуд бошад, ки дар он шумо метавонед коди ҳостро бехатар иҷро кунед, графикҳо эҷод кунед, виджетҳои UI-ро бо рамзи худ динамикӣ (интерактивӣ) пайваст кунед, рамзи илова бо матн бо blackjack ... формат? Як навъ блоги интерактивӣ? Вой... Ман мехоҳам! Мехоҳед! 🙂

Ба зери гурба нигаред, ки дар он ҷо мо дар як контейнер сар мекунем лабораторияи юпитер - насли ояндаи интерфейси корбар ба ҷои ноутбуки кӯҳнашудаи Jupyter ва мо инчунин модулҳои Python-ро насб хоҳем кард, ба монанди нопок, Пандас, Матплотлиб, IPyWidgets ки ба шумо имкон медиҳад, ки ҳама чизҳои дар боло номбаршударо иҷро кунед ва ҳамаашро дар файли махсус - ноутбуки IPython захира кунед.

Сар додани Jupyter ба мадори LXD

Плани парвози мадор ^

Сар додани Jupyter ба мадори LXD

Биёед нақшаи амали мухтасарро шарҳ диҳем, то татбиқи нақшаи дар боло зикршударо осонтар созем:

  • Биёед контейнерро дар асоси комплекти дистрибюторӣ насб кунем ва ба кор андозем Алп Linux. Мо ин тақсимотро истифода хоҳем кард, зеро он ба минимализм нигаронида шудааст ва ба он танҳо нармафзори заруриро насб мекунад, ҳеҷ чизи зиёдатӣ нест.
  • Биёед дар контейнер як диски виртуалии иловагӣ илова кунем ва ба он ном гузорем - hostfs ва онро ба системаи файлии реша насб кунед. Ин диск имкон медиҳад, ки файлҳои ҳост аз директорияи додашуда дар дохили контейнер истифода шаванд. Ҳамин тариқ, маълумоти мо аз контейнер мустақил хоҳад буд. Агар контейнер нест карда шавад, маълумот дар ҳост боқӣ мемонад. Инчунин, ин схема барои мубодилаи як маълумот байни бисёр контейнерҳо бе истифодаи механизмҳои шабакаи стандартии тақсимоти контейнер муфид аст.
  • Биёед Bash, sudo, китобхонаҳои заруриро насб кунем, корбари системаро илова ва танзим кунем
  • Биёед Python, модулҳоро насб кунем ва барои онҳо вобастагии дуӣ тартиб диҳем
  • Биёед насб кунем ва оғоз кунем лабораторияи юпитер, намуди зоҳириро танзим кунед, барои он васеъшавӣ насб кунед.

Дар ин мақола мо аз оғози контейнер оғоз мекунем, мо насб ва танзими LXD-ро баррасӣ намекунем, шумо ҳамаи инро дар мақолаи дигар пайдо карда метавонед - Хусусиятҳои асосии LXD - системаҳои контейнерии Linux.

Насб ва конфигуратсияи системаи асосӣ ^

Мо як контейнерро бо фармоне эҷод мекунем, ки дар он тасвирро муайян мекунем - alpine3, идентификатор барои контейнер - jupyterlab ва агар лозим бошад, профилҳои конфигуратсия:

lxc init alpine3 jupyterlab --profile=default --profile=hddroot

Дар ин ҷо ман профили конфигуратсияро истифода мебарам hddroot ки барои сохтани контейнер бо қисмати реша дар Ҳавзи нигоҳдорӣ дар диски сахти физикӣ ҷойгир шудааст:

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

Ин ба ман имкон медиҳад, ки бо контейнерҳо дар диски HDD таҷриба гузаронам ва захираҳои диски SSD-ро сарфа кунам, ки он дар системаи ман низ мавҷуд аст 🙂 барои он ман профили конфигуратсияи алоҳида эҷод кардам ssdroot.

Пас аз сохтани контейнер, он дар ҳолати аст STOPPED, аз ин рӯ мо бояд онро бо истифода аз системаи init дар он оғоз кунем:

lxc start jupyterlab

Биёед рӯйхати контейнерҳоро дар LXD бо истифода аз калид нишон диҳем -c ки нишон медихад, ки cНишондиҳандаҳо:

lxc list -c ns4b
+------------+---------+-------------------+--------------+
|    NAME    |  STATE  |       IPV4        | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool      |
+------------+---------+-------------------+--------------+

Ҳангоми сохтани контейнер, суроғаи IP ба таври тасодуфӣ интихоб карда шуд, зеро мо профили конфигуратсияро истифода мебарем default ки пештар дар макола танзим карда шуда буд Хусусиятҳои асосии LXD - системаҳои контейнерии Linux.

Мо ин суроғаи IP-ро бо эҷоди интерфейси шабакавӣ дар сатҳи контейнер ба суроғаи хотиравӣ иваз мекунем, на дар сатҳи профили конфигуратсия, чунон ки ҳоло дар конфигуратсияи ҷорӣ аст. Ба шумо лозим нест, ки ин корро кунед, шумо метавонед онро гузаред.

Эҷоди интерфейси шабака eth0 ки мо ба коммутатор пайваст мекунем (пули шабакавӣ) lxdbr0 ки дар он мо мувофиқи мақолаи қаблӣ NAT-ро фаъол кардем ва контейнер акнун ба Интернет дастрасӣ пайдо мекунад ва мо инчунин ба интерфейс суроғаи статикии IP таъин мекунем - 10.0.5.5:

lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5

Пас аз илова кардани дастгоҳ, контейнер бояд бозоғоз карда шавад:

lxc restart jupyterlab

Санҷиши ҳолати контейнер:

lxc list -c ns4b
+------------+---------+------------------+--------------+
|    NAME    |  STATE  |       IPV4       | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0)  | hddpool      |
+------------+---------+------------------+--------------+

Насб кардани нармафзори асосӣ ва танзими система ^

Барои идора кардани контейнери мо, шумо бояд нармафзори зеринро насб кунед:

бастаи
Тавсифи

bash
Силсилаи GNU Bourne Again

бас-тамом кардан
Анҷоми барномарезишаванда барои shell bash

sudo
Ба корбарони муайян имкон диҳед, ки баъзе фармонҳоро ҳамчун реша иҷро кунанд

соя
Маҷмӯи абзори идоракунии парол ва ҳисоб бо дастгирии файлҳои соя ва PAM

тздата
Сарчашмаҳо барои минтақаи вақт ва маълумот оид ба вақти рӯзона

нано
Клони муҳаррири Pico бо такмил

Илова бар ин, шумо метавонед дастгирӣро дар ман-саҳифаҳои система тавассути насб кардани бастаҳои зерин насб кунед - man man-pages mdocml-apropos less

lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano

Биёед ба фармонҳо ва калидҳое, ки мо истифода мебарем, бубинем:

  • lxc — Ба муштарии LXD занг занед
  • exec - Усули муштарии LXD, ки фармонро дар контейнер иҷро мекунад
  • jupyterlab - ID контейнер
  • -- - Калиди махсусе, ки таъбир накардани калидҳои минбаъдаро ҳамчун калид барои lxc ва боқимондаи сатрро тавре, ки ба контейнер гузаронед
  • apk — Менеҷери бастаи тақсимоти Alpine Linux
  • add — Усули мудири бастаҳо, ки бастаҳои пас аз фармон нишондодашударо насб мекунад

Минбаъд, мо дар система як минтақаи вақтро муқаррар мекунем Europe/Moscow:

lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Пас аз насб кардани минтақаи вақт, баста tzdata дигар дар система лозим нест, он ҷойро ишғол мекунад, бинобар ин биёед онро нест кунем:

lxc exec jupyterlab -- apk del tzdata

Санҷиши минтақаи вақт:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Барои он ки вақти зиёдро барои насб кардани Bash барои корбарони нав дар контейнер сарф накунед, дар қадамҳои зерин мо файлҳои skel-и тайёрро аз системаи ҳост ба он нусхабардорӣ мекунем. Ин ба шумо имкон медиҳад, ки Bash-ро дар як контейнер ба таври интерактивӣ зебо кунед. Системаи мизбони ман Manjaro Linux аст ва файлҳои нусхабардорӣ /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors аслан онҳо барои Alpine Linux мувофиқанд ва мушкилоти ҷиддиро ба вуҷуд намеоранд, аммо шумо метавонед тақсимоти дигар дошта бошед ва шумо бояд мустақилона муайян кунед, ки ҳангоми иҷро кардани Bash дар контейнер хатогӣ вуҷуд дорад.

Файлҳои skelро ба контейнер нусхабардорӣ кунед. Калид --create-dirs директорияҳои заруриро эҷод мекунад, агар онҳо вуҷуд надошта бошанд:

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

Барои корбари мавҷудаи реша, файлҳои skel, ки ба контейнер нусхабардорӣ шудаанд, ба феҳристи хонагӣ нусхабардорӣ кунед:

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 барои корбарон як қабати системаро насб мекунад /bin/sh, мо онро бо иваз мекунем root корбар дар Bash:

lxc exec jupyterlab -- usermod --shell=/bin/bash root

он 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 "New Password: $PASSWD""

New Password: sFiXEvBswuWA

Инчунин, биёед корбари нави система эҷод кунем - jupyter ки барои он мо дертар танзим мекунем лабораторияи юпитер:

lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter

Биёед барои он парол тавлид ва насб кунем:

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

Минбаъд, мо ду фармонро иҷро мекунем, якум гурӯҳи системаро эҷод мекунад sudo, ва дуюм ба он корбар илова мекунад jupyter:

lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter

Биёед бубинем, ки корбар ба кадом гурӯҳҳо тааллуқ дорад jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Ҳама чиз хуб аст, биёед идома диҳем.

Ба ҳамаи корбароне, ки аъзои гурӯҳ ҳастанд, иҷозат диҳед sudo фармонро истифода баред sudo. Барои ин кор, скрипти зеринро иҷро кунед, ки дар он ҷо sed хати параметрро дар файли конфигуратсия шарҳ намедиҳад /etc/sudoers:

lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"

Насб ва конфигуратсияи JupyterLab ^

лабораторияи юпитер барномаи Python аст, бинобар ин мо бояд аввал ин тарҷумонро насб кунем. Инчунин, лабораторияи юпитер мо бо истифода аз мудири бастаи Python насб мекунем pip, ва на система, зеро он метавонад дар анбори система кӯҳна бошад ва аз ин рӯ, мо бояд вобастагии онро тавассути насби бастаҳои зерин дастӣ ҳал кунем - python3 python3-dev gcc libc-dev zeromq-dev:

lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev

Биёед модулҳои python ва мудири бастаро навсозӣ кунем pip ба версияи ҷорӣ:

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

Насб кунед лабораторияи юпитер тавассути мудири баста pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Азбаски васеъшавӣ дар лабораторияи юпитер озмоишӣ мебошанд ва бо бастаи jupyterlab расман фиристода намешаванд, аз ин рӯ мо бояд онро дастӣ насб ва танзим кунем.

Биёед NodeJS ва мудири бастаро барои он насб кунем - NPM, зеро лабораторияи юпитер онҳоро барои васеъшавии худ истифода мебарад:

lxc exec jupyterlab -- apk add nodejs npm

Ба васеъшавӣ барои лабораторияи юпитер ки мо насб мекунем, кор кард, онҳо бояд дар феҳристи корбар насб карда шаванд, зеро барнома аз корбар оғоз мешавад jupyter. Мушкилот дар он аст, ки дар фармони оғозёбӣ ягон параметре вуҷуд надорад, ки ба директория интиқол дода шавад; барнома танҳо тағирёбандаи муҳити зистро қабул мекунад ва аз ин рӯ мо бояд онро муайян кунем. Барои ин мо фармони содироти тағирёбандаро менависем JUPYTERLAB_DIR дар муҳити корбар jupyter, ба файл .bashrcки ҳар дафъае, ки корбар ворид мешавад, иҷро мешавад:

lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"

Фармони навбатӣ тамдиди махсусро насб мекунад - мудири васеъшавӣ дар лабораторияи юпитер:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"

Акнун ҳама чиз барои оғози аввалин омода аст лабораторияи юпитер, аммо мо ҳоло ҳам метавонем якчанд васеъшавии муфидро насб кунем:

  • toc — Ҷадвали Мундариҷа, рӯйхати сарлавҳаҳоро дар мақола/дафтарча тавлид мекунад
  • jupyterlab-horizon-theme - Мавзӯи UI
  • jupyterlab_neon_theme - Мавзӯи UI
  • jupyterlab-ubu-theme - Дигараш мавзӯъ аз муаллиф ин мақола :) Аммо дар ин ҳолат, насб аз анбори GitHub нишон дода мешавад

Пас, барои насб кардани ин васеъшавӣ фармонҳои зеринро пай дар пай иҷро кунед:

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"

Пас аз насб кардани васеъшавӣ, мо бояд онҳоро тартиб диҳем, зеро қаблан ҳангоми насб мо калидро муайян кардем --no-build барои сарфа кардани вақт. Ҳоло мо тавассути ҷамъ кардани онҳо дар як вақт ба таври назаррас суръат хоҳем дод:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"

Акнун ду фармони зеринро иҷро кунед, то онро бори аввал иҷро кунед лабораторияи юпитер. Онро бо як фармон оғоз кардан мумкин буд, аммо дар ин ҳолат, фармони оғозёбӣ, ки дар зеҳни шумо душвор аст, бо bash дар контейнер ба ёд оварда мешавад, на дар ҳост, ки аллакай фармонҳои кофӣ мавҷуданд то онҳо дар таърих сабт шаванд :)

Ба контейнер ҳамчун корбар ворид шавед jupyter:

lxc exec jupyterlab -- su -l jupyter

Минбаъд, давед лабораторияи юпитер бо калидҳо ва параметрҳо тавре ки нишон дода шудааст:

[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser

Ба суроғаи браузери веби худ равед http://10.0.5.5:8888 ва дар саҳифае, ки кушода мешавад, ворид кунед нишаст дастрасӣ, ки шумо дар консол хоҳед дид. Онро дар саҳифа нусхабардорӣ ва часбонед, пас клик кунед Даромадан. Пас аз ворид шудан, ба менюи васеъкуниҳо дар тарафи чап равед, тавре ки дар расми зер нишон дода шудааст, ки дар он ҷо аз шумо хоҳиш карда мешавад, ки ҳангоми фаъол кардани менеҷери васеъшавӣ хатари амниятро тавассути насб кардани васеъшавӣ аз шахсони сеюм, ки фармони онҳо ба онҳо дода мешавад, бигиред. Рушди JupyterLab масъул нест:

Сар додани Jupyter ба мадори LXD

Бо вуҷуди ин, мо ҳамаро ҷудо мекунем лабораторияи юпитер ва онро дар як контейнер ҷойгир кунед, то васеъкуниҳои тарафи сеюм, ки NodeJS-ро талаб мекунанд ва истифода мебаранд, ҳадди аққал маълумотро дар диск дуздида натавонанд, ба ғайр аз онҳое, ки мо дар дохили контейнер мекушоем. Ба ҳуҷҷатҳои шахсии худ дар мизбон ворид шавед /home равандҳои аз контейнер муваффақ шуданашон аз эҳтимол дур нест ва агар онҳо кунанд, пас шумо бояд дар файлҳои системаи ҳост имтиёз дошта бошед, зеро мо контейнерро дар режими беимтиёз. Дар асоси ин маълумот, шумо метавонед хатари дохил кардани васеъшавиро баҳо диҳед лабораторияи юпитер.

Дафтарҳои IPython сохта шудааст (саҳифаҳо дар лабораторияи юпитер) ҳоло дар феҳристи хонагии корбар эҷод карда мешавад - /home/jupyter, аммо нақшаҳои мо тақсим кардани маълумот (тақсим) байни мизбон ва контейнер мебошанд, бинобар ин ба консол баргардед ва қатъ кунед лабораторияи юпитер бо иҷро кардани тугмаи hotkey - CTRL+C ва ҷавоб додан y мувофики талаб. Сипас сессияи интерактивии корбарро қатъ кунед jupyter пур кардани тугмаи hotkey CTRL+D.

Мубодилаи маълумот бо мизбон ^

Барои мубодилаи маълумот бо ҳост, шумо бояд дар контейнер дастгоҳеро эҷод кунед, ки ба шумо имкон медиҳад ин корро анҷом диҳед ва барои ин фармони зеринро иҷро кунед, ки дар он мо калидҳои зеринро муайян мекунем:

  • lxc config device add — Фармон конфигуратсияи дастгоҳро илова мекунад
  • jupyter — ID-и контейнере, ки ба он конфигуратсия илова карда шудааст
  • hostfs — ID дастгоҳ. Шумо метавонед ягон ном таъин кунед.
  • disk — Навъи дастгох нишон дода шудааст
  • path — Роҳеро дар контейнер муайян мекунад, ки LXD ин дастгоҳро ба он васл мекунад
  • source — Сарчашма, роҳро ба директория дар ҳост, ки мехоҳед бо контейнер мубодила кунед, муайян кунед. Роҳро мувофиқи афзалиятҳои худ муайян кунед
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Барои каталог /home/dv/projects/ipython-notebooks иҷозат бояд ба корбари контейнер, ки айни замон дорои UID баробар аст, муқаррар карда шавад SubUID + UID, ба боб нигаред Бехатарӣ. Имтиёзҳои контейнерӣ дар мақола Хусусиятҳои асосии LXD - системаҳои контейнерии Linux.

Иҷозатро ба мизбон таъин кунед, ки соҳиби он корбари контейнер хоҳад буд jupyter, ва тағирёбанда $USER корбари мизбони шуморо ҳамчун гурӯҳ муайян мекунад:

sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks

Салом Ҷаҳон! ^

Агар шумо ба ҳар ҳол сессияи консолро дар контейнер бо лабораторияи юпитер, пас онро бо калиди нав аз нав оғоз кунед --notebook-dir бо гузоштани арзиш /mnt/hostfs ҳамчун роҳ ба решаи ноутбукҳо дар контейнер барои дастгоҳе, ки мо дар қадами қаблӣ офаридаем:

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Пас ба саҳифа равед http://10.0.5.5:8888 ва аввалин ноутбуки худро бо пахш кардани тугмаи саҳифа тавре ки дар расми зер нишон дода шудааст, эҷод кунед:

Сар додани Jupyter ба мадори LXD

Сипас, дар майдони саҳифа, рамзи Python-ро ворид кунед, ки классикиро намоиш медиҳад Hello World!. Вақте ки шумо ворид шуданро анҷом додед, пахш кунед CTRL+ENTER ё тугмаи "бозӣ" -ро дар панели асбобҳо дар боло пахш кунед, то JupyterLab ин корро кунад:

Сар додани Jupyter ба мадори LXD

Дар айни замон, қариб ҳама чиз барои истифода омода аст, аммо агар мо модулҳои иловагии Python (барномаҳои мукаммал) насб накунем, ки метавонанд қобилиятҳои стандартии Python-ро ба таври назаррас васеъ кунанд, ҷолиб нахоҳад буд. лабораторияи юпитер, бинобар ин, биёед идома диҳем :)

PS Ҷолиб он аст, ки татбиқи кӯҳна Юпитер зери номи код Дафтарчаи Юпитер аз байн нарафтааст ва дар баробари вучуд дорад лабораторияи юпитер. Барои гузаштан ба версияи кӯҳна, ба истиноди илова кардани суффикс дар суроға пайравӣ кунед/tree, ва гузаштан ба варианти нав бо суффикс сурат мегирад /lab, аммо он набояд муайян карда шавад:

Васеъ кардани имкониятҳои Python ^

Дар ин бахш, мо чунин модулҳои пурқуввати забони Python насб мекунем, ба монанди нопок, Пандас, Матплотлиб, IPyWidgets ки натичахои он ба ноутбукхо дохил карда шудаанд лабораторияи юпитер.

Пеш аз насб кардани модулҳои номбаршудаи Python тавассути менеҷери бастаҳо pip мо бояд аввал вобастагии системаро дар Alpine Linux ҳал кунем:

  • g++ — Барои тартиб додани модулҳо лозим аст, зеро баъзеи онҳо бо забон амалӣ карда мешаванд C ++ ва ба Python дар вақти корӣ ҳамчун модулҳои дуӣ пайваст шавед
  • freetype-dev - вобастагӣ ба модули Python Матплотлиб

Насб кардани вобастагӣ:

lxc exec jupyterlab -- apk add g++ freetype-dev

Як мушкилот вуҷуд дорад: дар ҳолати кунунии тақсимоти Alpine Linux, тартиб додани версияи нави NumPy ғайриимкон хоҳад буд; хатогие пайдо мешавад, ки ман онро ҳал карда натавонистам:

ХАТО: Чархҳоро барои numpy сохтан, ки PEP 517-ро истифода мебаранд ва мустақиман насб кардан мумкин нест

Аз ин рӯ, мо ин модулро ҳамчун бастаи системавӣ насб хоҳем кард, ки версияи аллакай тартибёфтаро паҳн мекунад, аммо каме калонтар аз он чизе, ки ҳоло дар сайт мавҷуд аст:

lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev

Баъдан, модулҳои Python тавассути мудири бастаҳо насб кунед pip. Лутфан сабр кунед, зеро баъзе модулҳо тартиб дода мешаванд ва метавонанд чанд дақиқа вақт гиранд. Дар мошини ман, тартиб додан ~ 15 дақиқа вақт гирифт:

lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib

Тоза кардани кэшҳои насб:

lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*

Санҷиши модулҳо дар JupyterLab ^

Агар шумо давида бошед лабораторияи юпитер, онро бозоғоз намоед, то модулҳои нав насбшуда фаъол шаванд. Барои ин, дар сессияи консол, клик кунед CTRL+C ки дар он шумо онро иҷро мекунед ва ворид кунед y барои қатъ кардани дархост ва боз оғоз кардан лабораторияи юпитер бо пахш кардани тирчаи боло дар клавиатура, то ки фармонро такроран ворид накунем Enter барои оғоз кардани он:

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Ба саҳифа равед http://10.0.5.5:8888/lab ё саҳифаро дар браузери худ навсозӣ кунед ва пас рамзи зеринро ба ячейкаи нави дафтар ворид кунед:

%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

Шумо бояд натиҷае ба даст оред, ки дар расми зер дар куҷост IPyWidgets як унсури UI дар саҳифа, ки интерактивӣ бо коди манбаъ мутақобила тавлид мекунад, ва ҳамчунин Матплотлиб натиҷаи кодро дар шакли расм ҳамчун графики функсия нишон медиҳад:

Сар додани Jupyter ба мадори LXD

Бисьёр мисолхо IPyWidgets шумо метавонед онро дар дарсҳо пайдо кунед дар ин ҷо

Боз чӣ? ^

Хуб, агар шумо бимонед ва ба охири мақола расидед. Ман дидаву дониста дар охири мақола як скрипти тайёреро, ки насб карда мешавад, нагузорам лабораторияи юпитер бо "як клик" барои ҳавасманд кардани коргарон :) Аммо шумо метавонед ин корро худатон иҷро кунед, зеро шумо аллакай медонед, ки чӣ тавр фармонҳоро дар як скрипти ягонаи Bash ҷамъ овардаед :)

Шумо инчунин метавонед:

  • Номи шабакаро барои контейнер ба ҷои суроғаи IP бо навиштани он бо ҳарфи оддӣ таъин кунед /etc/hosts ва суроғаро дар браузер нависед http://jupyter.local:8888
  • Бо маҳдудияти захираҳои контейнер бозӣ кунед, барои ин бобро хонед имкониятҳои асосии LXD ё дар сайти таҳиягари LXD маълумоти бештар гиред.
  • Тағйир додани мавзӯъ:

Сар додани Jupyter ба мадори LXD

Ва бисёр чизҳое, ки шумо метавонед кор кунед! Ҳамааш ҳамин. Ба шумо муваффақият орзумандам!

НАВИ: 15.04.2020/18/30 XNUMX:XNUMX - Хатогиҳои ислоҳшуда дар боби "Салом, Ҷаҳон!"
НАВӢ: 16.04.2020/10/00 XNUMX:XNUMX — Матни ислоҳшуда ва иловашуда дар тавсифи фаъолсозии мудири васеъ лабораторияи юпитер
НАВИ: 16.04.2020/10/40 XNUMX:XNUMX — Хатогиҳои ислоҳшуда дар матн пайдо шуданд ва боби "Насб кардани нармафзори асосӣ ва танзими система" каме тағир дода шуданд.

Манбаъ: will.com

Илова Эзоҳ