Asosiy tizim haqida qayg'urmaslik va ildiz huquqlari bilan ishlashi kerak bo'lgan kodda xatolik yuz berganda hamma narsani buzmaslik uchun Linuxda kod yoki tizim yordam dasturlari bilan tajriba o'tkazishga majbur bo'lganmisiz?
Aytaylik, bitta mashinada turli xil mikroservislarning butun klasterini sinab ko'rish yoki ishga tushirish kerakligi haqida nima deyish mumkin? Yuz yoki hatto mingmi?
Gipervisor tomonidan boshqariladigan virtual mashinalar bilan bunday muammolarni hal qilish mumkin va hal qilinadi, ammo bu qanday narxga? Masalan, Alpine Linux distributiviga asoslangan LXD konteyneri faqat iste'mol qiladi 7.60MB
RAM va ishga tushirilgandan so'ng ildiz bo'limi egallagan joy 9.5MB
! Bu sizga qanday yoqadi, Ilon Mask? Men tekshirishni tavsiya qilaman LXD ning asosiy imkoniyatlari - Linuxda konteyner tizimi
Umuman olganda, LXD konteynerlari nima ekanligi ma'lum bo'lgandan so'ng, keling, o'ylab ko'raylik, agar siz xost uchun kodni xavfsiz ishga tushirishingiz, grafiklarni yaratishingiz, UI vidjetlarini kodingiz bilan dinamik (interaktiv) bog'lashingiz mumkin bo'lgan kombayn platformasi bo'lsa nima bo'ladi? kodni blackjack... formatlash bilan matn bilan to'ldirish? Qandaydir interaktiv blogmi? Voy... Men buni xohlayman! Xohlasangiz! 🙂
Mushukning ostiga qarang, u erda biz konteynerga tushiramiz Yupiter laboratoriyasi - eskirgan Jupyter Notebook o'rniga foydalanuvchi interfeysining keyingi avlodi va biz Python modullarini o'rnatamiz, masalan numpy, Pandas, matplotlib, IPyVidjetlar bu sizga yuqorida sanab o'tilgan hamma narsani bajarish va barchasini maxsus faylda - IPython noutbukida saqlash imkonini beradi.
Navigatsiya
- Orbital uchish rejasi
- Asosiy tizimni o'rnatish va sozlash
- Asosiy dasturiy ta'minotni o'rnatish va tizimni sozlash
- JupyterLabni o'rnatish va sozlash
- Xost bilan ma'lumotlarni almashish
- Salom Dunyo!
- Python imkoniyatlarini kengaytirish
- JupyterLab-da sinov modullari
- Nima yana?
Orbital uchish rejasi ^
Yuqoridagi sxemani amalga oshirishni osonlashtirish uchun qisqacha harakatlar rejasini tuzamiz:
- Keling, tarqatish to'plamiga asoslangan konteynerni o'rnatamiz va ishga tushiramiz Alpine Linux. Biz ushbu tarqatishdan foydalanamiz, chunki u minimalizmga qaratilgan va unda faqat eng kerakli dasturlarni o'rnatadi, ortiqcha narsa yo'q.
- Keling, konteynerga qo'shimcha virtual disk qo'shamiz va unga nom beramiz -
hostfs
va uni ildiz fayl tizimiga o'rnating. Ushbu disk konteyner ichidagi ma'lum bir katalogdan xostdagi fayllardan foydalanish imkonini beradi. Shunday qilib, bizning ma'lumotlarimiz konteynerdan mustaqil bo'ladi. Agar konteyner o'chirilsa, ma'lumotlar xostda qoladi. Bundan tashqari, ushbu sxema konteyner taqsimotining standart tarmoq mexanizmlaridan foydalanmasdan bir xil ma'lumotlarni ko'plab konteynerlar o'rtasida almashish uchun foydalidir. - Keling, Bash, sudo, kerakli kutubxonalarni o'rnatamiz, tizim foydalanuvchisini qo'shamiz va sozlaymiz
- Keling, Python, modullarni o'rnatamiz va ular uchun ikkilik bog'liqliklarni kompilyatsiya qilamiz
- Keling, o'rnatamiz va ishga tushiramiz Yupiter laboratoriyasi, tashqi ko'rinishini moslashtiring, buning uchun kengaytmalarni o'rnating.
Ushbu maqolada biz konteynerni ishga tushirishdan boshlaymiz, biz LXD-ni o'rnatish va sozlashni ko'rib chiqmaymiz, bularning barchasini boshqa maqolada topishingiz mumkin - LXD - Linux konteyner tizimlarining asosiy xususiyatlari.
Asosiy tizimni o'rnatish va sozlash ^
Biz tasvirni ko'rsatadigan buyruq bilan konteyner yaratamiz - alpine3
, konteyner uchun identifikator - jupyterlab
va agar kerak bo'lsa, konfiguratsiya profillari:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
Bu erda men konfiguratsiya profilidan foydalanmoqdaman hddroot
ichida ildiz bo'limi bo'lgan konteyner yaratishni belgilaydi Saqlash havzasi jismoniy qattiq diskda joylashgan:
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 menga SSD diskining resurslarini tejab, HDD diskidagi konteynerlar bilan tajriba o'tkazish imkoniyatini beradi, bu mening tizimimda ham mavjud 🙂 buning uchun men alohida konfiguratsiya profilini yaratdim. ssdroot
.
Konteyner yaratilgandan so'ng, u holatda STOPPED
, shuning uchun uni init tizimini ishga tushirish orqali boshlashimiz kerak:
lxc start jupyterlab
Kalit yordamida LXD da konteynerlar ro‘yxatini ko‘rsatamiz -c
qaysi birini bildiradi cko'rsatkichlar:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
Konteynerni yaratishda IP-manzil tasodifiy tanlandi, chunki biz konfiguratsiya profilidan foydalanganmiz default
ilgari maqolada tuzilgan LXD - Linux konteyner tizimlarining asosiy xususiyatlari.
Biz ushbu IP-manzilni hozirgi konfiguratsiyadagi kabi konfiguratsiya profili darajasida emas, balki konteyner darajasida tarmoq interfeysini yaratish orqali esda qolarliroq manzilga o'zgartiramiz. Buni qilish shart emas, uni o'tkazib yuborishingiz mumkin.
Tarmoq interfeysini yaratish eth0
biz kommutatorga bog'laymiz (tarmoq ko'prigi) lxdbr0
unda biz oldingi maqolaga muvofiq NAT-ni yoqdik va konteyner endi Internetga kirish imkoniyatiga ega bo'ladi va biz interfeysga statik IP-manzilni ham tayinlaymiz - 10.0.5.5
:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Qurilmani qo'shgandan so'ng, konteyner qayta ishga tushirilishi kerak:
lxc restart jupyterlab
Konteyner holatini tekshirish:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
Asosiy dasturiy ta'minotni o'rnatish va tizimni sozlash ^
Konteynerimizni boshqarish uchun siz quyidagi dasturiy ta'minotni o'rnatishingiz kerak:
To'plam
Tavsif
bosh
GNU Bourne Again qobig'i
bash-to'ldirish
Bash qobig'i uchun dasturlashtiriladigan tugatish
sudo
Ba'zi foydalanuvchilarga ba'zi buyruqlarni root sifatida ishlatish imkoniyatini bering
soya
Soya fayllari va PAMni qo'llab-quvvatlaydigan parol va hisobni boshqarish vositalari to'plami
tzdata
Vaqt mintaqasi va yozgi vaqt maʼlumotlari manbalari
Nano
Pico muharriri yaxshilanishlar bilan klon
Bundan tashqari, siz quyidagi paketlarni o'rnatish orqali tizimning man-sahifalarida qo'llab-quvvatlashni o'rnatishingiz mumkin - man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
Keling, biz foydalanadigan buyruqlar va kalitlarni ko'rib chiqaylik:
lxc
— LXD mijoziga qo‘ng‘iroq qilingexec
- Konteynerda buyruqni bajaradigan LXD mijoz usulijupyterlab
- Konteyner identifikatori--
- Boshqa kalitlarni kalit sifatida talqin qilmaslikni belgilaydigan maxsus kalitlxc
va ipning qolgan qismini konteynerga o'tkazingapk
— Alpine Linux tarqatish paketi menejeriadd
— Buyruqdan keyin ko'rsatilgan paketlarni o'rnatadigan paket menejeri usuli
Keyinchalik, tizimda vaqt zonasini o'rnatamiz. Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Vaqt mintaqasini o'rnatgandan so'ng, paket tzdata
tizimda endi kerak emas, u joy egallaydi, shuning uchun uni o'chirib tashlaymiz:
lxc exec jupyterlab -- apk del tzdata
Vaqt mintaqasini tekshirish:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
Konteynerda yangi foydalanuvchilar uchun Bash-ni o'rnatishga ko'p vaqt sarflamaslik uchun, keyingi bosqichlarda biz tayyor skel fayllarini xost tizimidan unga nusxalaymiz. Bu sizga konteynerdagi Bashni interaktiv tarzda chiroyli qilish imkonini beradi. Mening xost tizimim Manjaro Linux va ko'chirilayotgan fayllar /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
printsipial jihatdan ular Alpine Linux uchun mos keladi va jiddiy muammolarni keltirib chiqarmaydi, lekin sizda boshqa tarqatish bo'lishi mumkin va konteynerda Bash-ni ishga tushirishda xatolik mavjudligini mustaqil ravishda aniqlashingiz kerak.
Skel fayllarini konteynerga nusxalash. Kalit --create-dirs
agar ular mavjud bo'lmasa, kerakli kataloglarni yaratadi:
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
Mavjud ildiz foydalanuvchisi uchun konteynerga ko'chirilgan skel fayllarini uy katalogiga nusxalash:
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 foydalanuvchilar uchun tizim qobig'ini o'rnatadi /bin/sh
, bilan almashtiramiz root
Bashdagi foydalanuvchi:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
ekan root
foydalanuvchi parolsiz emas edi, u parol o'rnatishi kerak. Quyidagi buyruq u uchun yangi tasodifiy parolni yaratadi va o'rnatadi, uni bajarilgandan so'ng konsol ekranida ko'rasiz:
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
Shuningdek, yangi tizim foydalanuvchisini yarataylik - jupyter
buning uchun biz keyinroq sozlaymiz Yupiter laboratoriyasi:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
Buning uchun parol yaratamiz va o'rnatamiz:
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
Keyinchalik, biz ikkita buyruqni bajaramiz, birinchisi tizim guruhini yaratadi sudo
, ikkinchisi esa unga foydalanuvchi qo'shadi jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
Keling, foydalanuvchi qaysi guruhlarga tegishli ekanligini ko'rib chiqaylik jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
Hammasi yaxshi, keling, davom etamiz.
Guruh a'zolari bo'lgan barcha foydalanuvchilarga ruxsat bering sudo
buyrug'idan foydalaning sudo
. Buning uchun quyidagi skriptni ishga tushiring, bu erda sed
konfiguratsiya faylidagi parametr qatorini izohdan chiqaradi /etc/sudoers
:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"
JupyterLabni o'rnatish va sozlash ^
Yupiter laboratoriyasi Python ilovasi, shuning uchun biz avval ushbu tarjimonni o'rnatishimiz kerak. Shuningdek, Yupiter laboratoriyasi Python paket menejeri yordamida o'rnatamiz pip
, va tizim emas, chunki u tizim omborida eskirgan bo'lishi mumkin va shuning uchun biz quyidagi paketlarni o'rnatish orqali unga bog'liqlikni qo'lda hal qilishimiz kerak - python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
Python modullari va paket menejerini yangilaymiz pip
joriy versiyaga:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
O'rnatish Yupiter laboratoriyasi paket menejeri orqali pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
Kengaytmalardan beri Yupiter laboratoriyasi eksperimental bo‘lib, jupyterlab to‘plami bilan rasman jo‘natilmagan, shuning uchun biz uni qo‘lda o‘rnatishimiz va sozlashimiz kerak.
Keling, NodeJS va uning uchun paketlar menejerini o'rnatamiz - NPM, chunki Yupiter laboratoriyasi ularni kengaytmalari uchun ishlatadi:
lxc exec jupyterlab -- apk add nodejs npm
Kengaytmalar uchun Yupiter laboratoriyasi Biz o'rnatadigan dastur ishlagan bo'lsa, ular foydalanuvchi katalogiga o'rnatilishi kerak, chunki dastur foydalanuvchidan ishga tushiriladi jupyter
. Muammo shundaki, ishga tushirish buyrug'ida katalogga uzatiladigan parametr yo'q; dastur faqat muhit o'zgaruvchisini qabul qiladi va shuning uchun biz uni aniqlashimiz kerak. Buning uchun o'zgaruvchini eksport qilish buyrug'ini yozamiz JUPYTERLAB_DIR
foydalanuvchi muhitida jupyter
, faylga .bashrc
foydalanuvchi har safar tizimga kirganida bajariladi:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
Keyingi buyruq maxsus kengaytmani o'rnatadi - kengaytma menejeri Yupiter laboratoriyasi:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
Endi hamma narsa birinchi ishga tushirishga tayyor Yupiter laboratoriyasi, lekin biz hali ham bir nechta foydali kengaytmalarni o'rnatishimiz mumkin:
toc
— Mundarija, maqola/daftarda sarlavhalar roʻyxatini yaratadijupyterlab-horizon-theme
- UI mavzusijupyterlab_neon_theme
- UI mavzusijupyterlab-ubu-theme
- Boshqasi muallifdan mavzu bu maqola :) Lekin bu holda GitHub omboridan o'rnatish ko'rsatiladi
Shunday qilib, ushbu kengaytmalarni o'rnatish uchun quyidagi buyruqlarni ketma-ket bajaring:
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"
Kengaytmalarni o'rnatgandan so'ng, biz ularni kompilyatsiya qilishimiz kerak, chunki ilgari o'rnatish paytida biz kalitni ko'rsatganmiz --no-build
vaqtni tejash uchun. Endi biz ularni bir vaqtning o'zida yig'ish orqali sezilarli darajada tezlashtiramiz:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
Endi birinchi marta ishga tushirish uchun quyidagi ikkita buyruqni bajaring Yupiter laboratoriyasi. Uni bitta buyruq bilan ishga tushirish mumkin edi, lekin bu holda eslab qolish qiyin bo'lgan ishga tushirish buyrug'i allaqachon etarli buyruqlar mavjud bo'lgan hostda emas, balki konteynerda bash orqali eslab qoladi. ularni tarixga yozib qo'yish :)
Konteynerga foydalanuvchi sifatida kiring jupyter
:
lxc exec jupyterlab -- su -l jupyter
Keyingi, yugur Yupiter laboratoriyasi ko'rsatilgandek kalitlar va parametrlar bilan:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
Veb-brauzeringizdagi manzilga o'ting http://10.0.5.5:8888 va ochilgan sahifada kiriting token konsolda ko'rishingiz mumkin bo'lgan kirish. Uni sahifaga nusxalash va joylashtirish, so'ng tugmasini bosing Kirish. Tizimga kirganingizdan so'ng, quyidagi rasmda ko'rsatilganidek, chap tomondagi kengaytmalar menyusiga o'ting, u erda kengaytma menejerini faollashtirishda buyruq berilgan uchinchi tomon kengaytmalarini o'rnatish orqali xavfsizlikka xavf tug'dirish so'raladi. JupyterLab ishlab chiqish javobgar emas:
Biroq, biz butunlay izolyatsiya qilamiz Yupiter laboratoriyasi NodeJS-ni talab qiladigan va ishlatadigan uchinchi tomon kengaytmalari hech bo'lmaganda diskdagi ma'lumotlarni o'g'irlamasligi uchun uni konteynerga joylashtiring, shunda biz konteyner ichida ochamiz. Xostdagi shaxsiy hujjatlaringizga kiring /home
konteynerdagi jarayonlar muvaffaqiyatli bo'lishi dargumon va agar shunday bo'lsa, siz xost tizimidagi fayllar uchun imtiyozlarga ega bo'lishingiz kerak, chunki biz konteynerni ishga tushiramiz. imtiyozsiz rejim. Ushbu ma'lumotlarga asoslanib, siz kengaytmalarni kiritish xavfini baholashingiz mumkin Yupiter laboratoriyasi.
Yaratilgan IPython noutbuklari (sahifalar Yupiter laboratoriyasi) endi foydalanuvchining uy katalogida yaratiladi - /home/jupyter
, lekin bizning rejalarimiz ma'lumotlarni xost va konteyner o'rtasida bo'lishdir, shuning uchun konsolga qayting va to'xtating. Yupiter laboratoriyasi tezkor tugmani bajarish orqali - CTRL+C
va javob berish y
iltimosiga binoan. Keyin foydalanuvchining interaktiv seansini to'xtating jupyter
tezkor tugmani to'ldirish CTRL+D
.
Xost bilan ma'lumotlarni almashish ^
Xost bilan ma'lumotlarni almashish uchun siz konteynerda buni amalga oshirishga imkon beradigan qurilma yaratishingiz kerak va buni amalga oshirish uchun quyidagi buyruqni bajaring, bu erda biz quyidagi tugmachalarni belgilaymiz:
lxc config device add
— Buyruq qurilma konfiguratsiyasini qo'shadijupyter
— konfiguratsiya qo'shilgan konteyner identifikatorihostfs
- Qurilma identifikatori. Siz har qanday nomni o'rnatishingiz mumkin.disk
— Qurilmaning turi ko'rsatilganpath
— LXD ushbu qurilmani o'rnatadigan konteynerdagi yo'lni belgilaydisource
— Konteyner bilan baham ko'rmoqchi bo'lgan xostdagi manbani, katalogga yo'lni belgilang. O'zingizning xohishingizga ko'ra yo'lni belgilang
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
Katalog uchun /home/dv/projects/ipython-notebooks
ruxsat hozirda teng UIDga ega bo'lgan konteyner foydalanuvchisiga o'rnatilishi kerak SubUID + UID
, bobga qarang Xavfsizlik. Konteyner imtiyozlari maqolasida LXD - Linux konteyner tizimlarining asosiy xususiyatlari.
Xostga ruxsatni o'rnating, bu erda egasi konteyner foydalanuvchisi bo'ladi jupyter
, va o'zgaruvchi $USER
xost foydalanuvchingizni guruh sifatida belgilaydi:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
Salom Dunyo! ^
Agar siz hali ham konteynerda ochiq konsol seansiga ega bo'lsangiz Yupiter laboratoriyasi, keyin uni yangi kalit bilan qayta ishga tushiring --notebook-dir
qiymatni belgilash orqali /mnt/hostfs
Avvalgi bosqichda biz yaratgan qurilma uchun konteynerdagi noutbuklarning ildiziga yo'l sifatida:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Keyin sahifaga o'ting http://10.0.5.5:8888 va quyidagi rasmda ko'rsatilgandek sahifadagi tugmani bosish orqali birinchi noutbukingizni yarating:
Keyin sahifadagi maydonga klassikani ko'rsatadigan Python kodini kiriting Hello World!
. Kirishni tugatgandan so'ng, tugmasini bosing CTRL+ENTER
yoki JupyterLab buni amalga oshirishi uchun tepadagi asboblar panelidagi "o'ynash" tugmasi:
Hozirgi vaqtda deyarli hamma narsa foydalanishga tayyor, ammo Python-ning standart imkoniyatlarini sezilarli darajada kengaytira oladigan qo'shimcha Python modullarini (to'liq huquqli ilovalar) o'rnatmasak, bu qiziq bo'lmaydi. Yupiter laboratoriyasi, shuning uchun keling, davom etaylik :)
PS Qizig'i shundaki, eski dastur Yupyter kod nomi ostida Yupyter daftarchasi ketmagan va u bilan parallel ravishda mavjud Yupiter laboratoriyasi. Eski versiyaga o'tish uchun manzilga qo'shimchani qo'shadigan havolaga o'ting/tree
, va yangi versiyaga o'tish qo'shimchasi bilan amalga oshiriladi /lab
, lekin uni belgilash shart emas:
- Jupyter noutbuki - http://10.0.5.5:8888/tree
- Jupyter laboratoriyasi - http://10.0.5.5:8888/lab
Python imkoniyatlarini kengaytirish ^
Ushbu bo'limda biz kuchli Python tili modullarini o'rnatamiz numpy, Pandas, matplotlib, IPyVidjetlar natijalari noutbuklarga integratsiya qilingan Yupiter laboratoriyasi.
Ro'yxatdagi Python modullarini paket menejeri orqali o'rnatishdan oldin pip
Biz birinchi navbatda Alpine Linux-da tizimga bog'liqlikni hal qilishimiz kerak:
g++
— Modullarni kompilyatsiya qilish uchun kerak, chunki ularning ba'zilari tilda amalga oshiriladi C ++ va Python-ga ish vaqtida ikkilik modullar sifatida ulaningfreetype-dev
- Python moduliga bog'liqlik matplotlib
Bog'liqlarni o'rnatish:
lxc exec jupyterlab -- apk add g++ freetype-dev
Bitta muammo bor: Alpine Linux tarqatishning hozirgi holatida NumPy-ning yangi versiyasini kompilyatsiya qilish mumkin bo'lmaydi; men hal qila olmagan kompilyatsiya xatosi paydo bo'ladi:
ERROR: PEP 517 dan foydalanadigan va to'g'ridan-to'g'ri o'rnatib bo'lmaydigan numpy uchun g'ildiraklar qurib bo'lmadi
Shuning uchun biz ushbu modulni allaqachon tuzilgan versiyani tarqatadigan tizim paketi sifatida o'rnatamiz, lekin hozirda saytda mavjud bo'lganidan biroz eskiroq:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
Keyin paket menejeri orqali Python modullarini o'rnating pip
. Iltimos, sabr qiling, chunki ba'zi modullar kompilyatsiya qilinadi va bir necha daqiqa vaqt olishi mumkin. Mening mashinamda kompilyatsiya ~ 15 daqiqa davom etdi:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
O'rnatish keshlarini tozalash:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
JupyterLab-da sinov modullari ^
Agar siz yugurayotgan bo'lsangiz Yupiter laboratoriyasi, yangi o'rnatilgan modullar faollashishi uchun uni qayta ishga tushiring. Buning uchun konsol seansida bosing CTRL+C
u ishlayotgan qaerda va kiring y
so'rovni to'xtatib, keyin yana boshlash uchun Yupiter laboratoriyasi buyruqni yana va keyin kiritmaslik uchun klaviaturadagi yuqoriga o'qni bosib Enter
boshlash uchun:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Sahifaga o'ting http://10.0.5.5:8888/lab yoki brauzeringizdagi sahifani yangilang va keyin yangi daftar katagiga quyidagi kodni kiriting:
%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
Quyidagi rasmdagi kabi natija olishingiz kerak, qaerda IPyVidjetlar sahifada manba kodi bilan interaktiv o'zaro ta'sir qiluvchi UI elementini yaratadi va shuningdek matplotlib kod natijasini rasm ko'rinishida funktsiya grafigi sifatida ko'rsatadi:
Ko'p misollar IPyVidjetlar uni o'quv qo'llanmalarida topishingiz mumkin shu yerda
Nima yana? ^
Agar siz qolib, maqolaning oxiriga etib borgan bo'lsangiz, yaxshi. Maqolaning oxirida o'rnatiladigan tayyor skriptni ataylab joylashtirmadim Yupiter laboratoriyasi Ishchilarni rag'batlantirish uchun "bir marta bosish" bilan :) Lekin siz buni o'zingiz qilishingiz mumkin, chunki siz buyruqlarni bitta Bash skriptida to'plaganingiz uchun qanday qilishni allaqachon bilasiz :)
Siz shuningdek:
- Konteyner uchun IP-manzil o'rniga tarmoq nomini oddiy tarzda yozib qo'ying
/etc/hosts
va brauzerda manzilni kiriting http://jupyter.local:8888 - Konteyner uchun resurs chegarasi bilan o'ynang, buning uchun bobni o'qing asosiy LXD imkoniyatlari yoki LXD ishlab chiquvchi saytida qo'shimcha ma'lumot oling.
- Mavzuni o'zgartiring:
Va yana ko'p narsalarni qila olasiz! Ana xolos. Sizga muvaffaqiyatlar tilayman!
YANGILANISH: 15.04.2020 18:30 - “Salom, dunyo!” bobidagi xatolar tuzatildi.
YANGILANISH: 16.04.2020 10:00 - Kengaytma menejerini faollashtirish tavsifida tuzatilgan va qo'shilgan matn Yupiter laboratoriyasi
YANGILANISH: 16.04.2020 10:40 — Matnda topilgan xatolar tuzatildi va “Asosiy dasturiy taʼminotni oʻrnatish va tizimni sozlash” boʻlimi yaxshi tomonga biroz oʻzgartirildi.
Manba: www.habr.com