Inilunsad ang Jupyter sa LXD orbit

Naranasan mo na bang mag-eksperimento sa code o system utilities sa Linux nang hindi nababahala tungkol sa pinagbabatayan ng system at sirain ang lahat kung sakaling magkaroon ng error sa code na dapat tumakbo nang may mga pribilehiyo sa ugat?

Ngunit ano ang tungkol sa katotohanan na sabihin nating kailangan mong subukan o patakbuhin ang isang buong kumpol ng iba't ibang mga microservice sa isang makina? Isang daan o kahit isang libo?

Sa mga virtual machine na pinamamahalaan ng isang hypervisor, ang mga naturang problema ay maaari at malulutas, ngunit sa anong halaga? Halimbawa, ang isang lalagyan sa LXD batay sa pamamahagi ng Alpine Linux ay kumonsumo lamang 7.60MB RAM, at kung saan ang root partition ay sumasakop pagkatapos ng startup 9.5MB! Paano mo gusto iyon, Elon Musk? Inirerekomenda kong mag-check out pangunahing mga kakayahan ng LXD - isang container system sa Linux

Matapos maging malinaw sa pangkalahatan kung ano ang mga LXD na lalagyan, mag-isip pa tayo, paano kung mayroong ganoong harvester platform kung saan maaari mong ligtas na patakbuhin ang code para sa host, bumuo ng mga graph, dynamic na (interactive) na i-link ang mga UI- widget sa iyong code, dagdagan ang code ng teksto na may blackjack... pag-format? Isang uri ng interactive na blog? Wow... gusto ko! Gusto! 🙂

Tumingin sa ilalim ng pusa kung saan namin ilulunsad sa isang lalagyan jupyter lab - ang susunod na henerasyon ng user interface sa halip na ang lumang Jupyter Notebook, at mag-i-install din kami ng mga module ng Python tulad ng numpy, Pandas, matplotlib, IPyWidgets na magpapahintulot sa iyo na gawin ang lahat ng nakalista sa itaas at i-save ang lahat ng ito sa isang espesyal na file - isang IPython laptop.

Inilunsad ang Jupyter sa LXD orbit

Orbital take-off plan ^

Inilunsad ang Jupyter sa LXD orbit

Magbalangkas tayo ng maikling plano ng aksyon para mas mapadali para sa atin na ipatupad ang scheme sa itaas:

  • Mag-install at maglunsad tayo ng container batay sa distribution kit Alpine Linux. Gagamitin namin ang pamamahagi na ito dahil ito ay naglalayong minimalism at i-install lamang ang pinaka-kinakailangang software dito, walang labis.
  • Magdagdag tayo ng karagdagang virtual disk sa lalagyan at bigyan ito ng pangalan - hostfs at i-mount ito sa root file system. Ang disk na ito ay gagawing posible na gumamit ng mga file sa host mula sa isang ibinigay na direktoryo sa loob ng lalagyan. Kaya, ang aming data ay magiging hiwalay sa lalagyan. Kung tatanggalin ang container, mananatili ang data sa host. Gayundin, ang scheme na ito ay kapaki-pakinabang para sa pagbabahagi ng parehong data sa pagitan ng maraming container nang hindi ginagamit ang mga karaniwang mekanismo ng network ng pamamahagi ng container.
  • I-install natin ang Bash, sudo, ang mga kinakailangang library, magdagdag at mag-configure ng user ng system
  • Mag-install tayo ng Python, mga module at mag-compile ng mga binary dependencies para sa kanila
  • I-install at ilunsad natin jupyter lab, i-customize ang hitsura, i-install ang mga extension para dito.

Sa artikulong ito, magsisimula kami sa paglulunsad ng lalagyan, hindi namin isasaalang-alang ang pag-install at pag-configure ng LXD, mahahanap mo ang lahat ng ito sa isa pang artikulo - Mga pangunahing tampok ng LXD - Linux container system.

Pag-install at pagsasaayos ng pangunahing sistema ^

Lumilikha kami ng isang lalagyan na may utos kung saan tinukoy namin ang imahe - alpine3, identifier para sa lalagyan - jupyterlab at, kung kinakailangan, mga profile ng pagsasaayos:

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

Narito ako ay gumagamit ng isang configuration profile hddroot na tumutukoy upang lumikha ng isang lalagyan na may root partition sa Pool ng Imbakan matatagpuan sa isang pisikal na HDD disk:

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

Nagbibigay ito sa akin ng pagkakataong mag-eksperimento sa mga lalagyan sa HDD disk, na nagse-save ng mga mapagkukunan ng SSD disk, na magagamit din sa aking system 🙂 kung saan lumikha ako ng isang hiwalay na profile ng pagsasaayos. ssdroot.

Matapos magawa ang lalagyan, ito ay nasa estado STOPPED, kaya kailangan nating simulan ito sa pamamagitan ng pagpapatakbo ng init system dito:

lxc start jupyterlab

Ipakita natin ang isang listahan ng mga lalagyan sa LXD gamit ang key -c na nagpapahiwatig kung alin cpagpapakita ng mga olumn:

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

Sa paggawa ng lalagyan, random na pinili ang IP address, dahil gumamit kami ng configuration profile default na dati nang na-configure sa artikulo Mga pangunahing tampok ng LXD - Linux container system.

Papalitan namin ang IP address na ito sa isang mas hindi malilimutang isa sa pamamagitan ng paggawa ng interface ng network sa antas ng container, at hindi sa antas ng profile ng configuration dahil ito ay nasa kasalukuyang configuration. Hindi mo kailangang gawin ito, maaari mong laktawan ito.

Paglikha ng interface ng network eth0 na ini-link namin sa switch (tulay ng network) lxdbr0 kung saan pinagana namin ang NAT ayon sa nakaraang artikulo at ang lalagyan ay magkakaroon na ngayon ng access sa Internet, at nagtatalaga rin kami ng static na IP address sa interface - 10.0.5.5:

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

Pagkatapos magdagdag ng device, dapat na i-reboot ang container:

lxc restart jupyterlab

Sinusuri ang katayuan ng lalagyan:

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

Pag-install ng pangunahing software at pag-set up ng system ^

Upang pangasiwaan ang aming lalagyan, kailangan mong i-install ang sumusunod na software:

pakete
paglalarawan

malakas na palo
Ang shell ng GNU Bourne Again

bash-completion
Programmable na pagkumpleto para sa bash shell

sudo
Bigyan ang ilang partikular na user ng kakayahang magpatakbo ng ilang command bilang root

anino
Password at account management tool suite na may suporta para sa mga shadow file at PAM

tzdata
Mga mapagkukunan para sa data ng time zone at daylight saving time

nano
I-clone ang Pico editor na may mga pagpapahusay

Bilang karagdagan, maaari kang mag-install ng suporta sa mga man-page ng system sa pamamagitan ng pag-install ng mga sumusunod na pakete − man man-pages mdocml-apropos less

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

Tingnan natin ang mga command at key na ginamit namin:

  • lxc — Tawagan ang LXD client
  • exec - LXD client method na nagpapatakbo ng command sa container
  • jupyterlab — Container ID
  • -- - Isang espesyal na key na nagsasaad na huwag bigyang-kahulugan ang mga karagdagang key bilang mga susi para sa lxc at ipasa ang natitirang string sa lalagyan
  • apk — Alpine Linux distribution package manager
  • add — Isang paraan ng manager ng package na nag-i-install ng mga package na tinukoy pagkatapos ng command

Susunod, magtatakda kami ng time zone sa system Europe/Moscow:

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

Pagkatapos i-install ang time zone, ang package tzdata ay hindi na kailangan sa system, kukuha ito ng espasyo, kaya tanggalin natin ito:

lxc exec jupyterlab -- apk del tzdata

Sinusuri ang time zone:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Upang hindi gumugol ng maraming oras sa pag-set up ng Bash para sa mga bagong user sa container, sa mga sumusunod na hakbang ay kokopyahin namin ang mga yari na skel file mula sa host system patungo dito. Ito ay magbibigay-daan sa iyong pagandahin ang Bash sa isang container nang interactive. Ang aking host system ay Manjaro Linux at ang mga file na kinokopya /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors sa prinsipyo ang mga ito ay angkop para sa Alpine Linux at hindi nagiging sanhi ng mga kritikal na problema, ngunit maaari kang magkaroon ng ibang pamamahagi at kailangan mong independiyenteng malaman kung mayroong isang error kapag nagpapatakbo ng Bash sa lalagyan.

Kopyahin ang mga skel file sa lalagyan. Susi --create-dirs gagawa ng mga kinakailangang direktoryo kung wala ang mga ito:

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

Para sa isang umiiral nang root user, kopyahin ang mga skel file na kakakopya lang sa container sa home directory:

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

Nag-i-install ang Alpine Linux ng system shell para sa mga user /bin/sh, papalitan namin ito ng root user sa Bash:

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

Na root ang user ay hindi passwordless, kailangan niyang magtakda ng password. Ang sumusunod na utos ay bubuo at magtatakda ng bagong random na password para sa kanya, na makikita mo sa console screen pagkatapos na ito ay maisakatuparan:

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

Gayundin, gumawa tayo ng bagong user ng system - jupyter para sa kung saan namin i-configure sa ibang pagkakataon jupyter lab:

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

Bumuo tayo at magtakda ng password para dito:

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

Susunod, gagawa kami ng dalawang utos, ang una ay lilikha ng isang pangkat ng system sudo, at ang pangalawa ay magdaragdag ng user dito jupyter:

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

Tingnan natin kung anong mga grupo ang kinabibilangan ng user jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Okay na ang lahat, let's move on.

Payagan ang lahat ng user na miyembro ng grupo sudo gumamit ng utos sudo. Upang gawin ito, patakbuhin ang sumusunod na script, kung saan sed inaalis ng komento ang linya ng parameter sa configuration file /etc/sudoers:

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

Pag-install at pag-configure ng JupyterLab ^

jupyter lab ay isang Python application, kaya kailangan muna nating i-install ang interpreter na ito. Gayundin, jupyter lab i-install namin gamit ang Python package manager pip, at hindi ang system, dahil maaaring luma na ito sa repository ng system at samakatuwid, kailangan nating manu-manong lutasin ang mga dependency para dito sa pamamagitan ng pag-install ng mga sumusunod na pakete − python3 python3-dev gcc libc-dev zeromq-dev:

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

I-update natin ang mga python modules at package manager pip sa kasalukuyang bersyon:

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

Itakda jupyter lab sa pamamagitan ng manager ng package pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Dahil ang mga extension sa jupyter lab ay eksperimental at hindi opisyal na ipinadala kasama ang jupyterlab package, kaya kailangan namin itong i-install at i-configure nang manu-mano.

I-install natin ang NodeJS at ang package manager para dito - NPM, dahil jupyter lab ginagamit ang mga ito para sa mga extension nito:

lxc exec jupyterlab -- apk add nodejs npm

Sa mga extension para sa jupyter lab na aming i-install ay nagtrabaho, kailangan nilang mai-install sa direktoryo ng user dahil ang application ay ilulunsad mula sa user jupyter. Ang problema ay walang parameter sa launch command na maaaring ipasa sa isang direktoryo; ang application ay tumatanggap lamang ng environment variable at samakatuwid ay dapat nating tukuyin ito. Para magawa ito, isusulat namin ang variable export command JUPYTERLAB_DIR sa kapaligiran ng gumagamit jupyter, para mag-file .bashrcna isinasagawa sa tuwing magla-log in ang user:

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

Ang susunod na command ay mag-i-install ng isang espesyal na extension - extension manager in jupyter lab:

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

Ngayon ang lahat ay handa na para sa unang paglulunsad jupyter lab, ngunit maaari pa rin kaming mag-install ng ilang kapaki-pakinabang na extension:

  • toc — Talaan ng mga Nilalaman, bumubuo ng isang listahan ng mga heading sa isang artikulo/notebook
  • jupyterlab-horizon-theme — Tema ng UI
  • jupyterlab_neon_theme — Tema ng UI
  • jupyterlab-ubu-theme - Isa pa tema mula sa may-akda ang artikulong ito :) Ngunit sa kasong ito, ipapakita ang pag-install mula sa repositoryo ng GitHub

Kaya, patakbuhin ang mga sumusunod na command nang sunud-sunod upang mai-install ang mga extension na ito:

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"

Pagkatapos i-install ang mga extension, dapat naming ipunin ang mga ito, dahil dati, sa panahon ng pag-install, tinukoy namin ang susi --no-build para makatipid ng oras. Ngayon ay bibilis tayo nang malaki sa pamamagitan ng pagsasama-sama ng mga ito nang sabay-sabay:

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

Ngayon patakbuhin ang sumusunod na dalawang utos upang patakbuhin ito sa unang pagkakataon jupyter lab. Posibleng ilunsad ito sa isang utos, ngunit sa kasong ito, ang utos ng paglulunsad, na mahirap tandaan sa iyong isipan, ay tatandaan ng bash sa lalagyan, at hindi sa host, kung saan mayroon nang sapat na mga utos. para maitala sila sa kasaysayan :)

Mag-login sa container bilang user jupyter:

lxc exec jupyterlab -- su -l jupyter

Susunod, tumakbo jupyter lab na may mga susi at parameter gaya ng ipinahiwatig:

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

Pumunta sa address sa iyong web browser http://10.0.5.5:8888 at sa pahinang bubukas ay ipasok token access na makikita mo sa console. Kopyahin at i-paste ito sa pahina, pagkatapos ay i-click Mag-login. Pagkatapos mag-log in, pumunta sa menu ng mga extension sa kaliwa, tulad ng ipinapakita sa figure sa ibaba, kung saan sasabihan ka, kapag ina-activate ang extension manager, na kumuha ng mga panganib sa seguridad sa pamamagitan ng pag-install ng mga extension mula sa mga third party kung saan ang command Pag-unlad ng JupyterLab ay hindi mananagot:

Inilunsad ang Jupyter sa LXD orbit

Gayunpaman, ibinubukod namin ang kabuuan jupyter lab at ilagay ito sa isang lalagyan upang ang mga extension ng third-party na nangangailangan at gumagamit ng NodeJS ay hindi man lang makapagnakaw ng data sa disk maliban sa mga binubuksan namin sa loob ng lalagyan. Kunin ang iyong mga pribadong dokumento sa host in /home ang mga proseso mula sa lalagyan ay malamang na hindi magtagumpay, at kung gagawin nila, kailangan mong magkaroon ng mga pribilehiyo sa mga file sa host system, dahil pinapatakbo namin ang lalagyan sa unprivileged mode. Batay sa impormasyong ito, maaari mong masuri ang panganib ng pagsasama ng mga extension sa jupyter lab.

Gumawa ng mga IPython notebook (mga pahina sa jupyter lab) ay gagawin na ngayon sa home directory ng user - /home/jupyter, ngunit ang aming mga plano ay hatiin ang data (share) sa pagitan ng host at ng container, kaya bumalik sa console at huminto jupyter lab sa pamamagitan ng pagsasagawa ng hotkey - CTRL+C at sumasagot y kapag hiniling. Pagkatapos ay wakasan ang interactive na session ng user jupyter pagkumpleto ng isang hotkey CTRL+D.

Pagbabahagi ng data sa host ^

Para magbahagi ng data sa host, kailangan mong gumawa ng device sa container na nagbibigay-daan sa iyong gawin ito at para gawin ito, patakbuhin ang sumusunod na command kung saan tinukoy namin ang mga sumusunod na key:

  • lxc config device add — Idinaragdag ng command ang configuration ng device
  • jupyter — ID ng container kung saan idinaragdag ang configuration
  • hostfs — Device ID. Maaari kang magtakda ng anumang pangalan.
  • disk — Ang uri ng aparato ay ipinahiwatig
  • path — Tinutukoy ang path sa container kung saan ilalagay ng LXD ang device na ito
  • source — Tukuyin ang pinagmulan, ang landas patungo sa direktoryo sa host na gusto mong ibahagi sa lalagyan. Tukuyin ang landas ayon sa iyong mga kagustuhan
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Para sa catalog /home/dv/projects/ipython-notebooks dapat itakda ang pahintulot sa user ng container na kasalukuyang may katumbas na UID SubUID + UID, tingnan ang kabanata Kaligtasan. Mga Pribilehiyo sa Lalagyan sa artikulo Mga pangunahing tampok ng LXD - Linux container system.

Itakda ang pahintulot sa host, kung saan ang may-ari ay ang user ng container jupyter, at ang variable $USER ay tutukuyin ang iyong host user bilang isang grupo:

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

Kumusta, Mundo! ^

Kung mayroon ka pa ring console session na bukas sa container na may jupyter lab, pagkatapos ay i-restart ito gamit ang isang bagong key --notebook-dir sa pamamagitan ng pagtatakda ng halaga /mnt/hostfs bilang landas patungo sa ugat ng mga laptop sa lalagyan para sa device na ginawa namin sa nakaraang hakbang:

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

Pagkatapos ay pumunta sa pahina http://10.0.5.5:8888 at lumikha ng iyong unang laptop sa pamamagitan ng pag-click sa pindutan sa pahina tulad ng ipinapakita sa larawan sa ibaba:

Inilunsad ang Jupyter sa LXD orbit

Pagkatapos, sa field sa page, ilagay ang Python code na magpapakita ng classic Hello World!. Kapag tapos ka nang pumasok, pindutin ang CTRL+ENTER o ang "play" na button sa toolbar sa itaas upang gawin ito sa JupyterLab:

Inilunsad ang Jupyter sa LXD orbit

Sa puntong ito, halos lahat ay handa nang gamitin, ngunit hindi kawili-wili kung hindi tayo mag-i-install ng karagdagang mga module ng Python (mga ganap na application) na maaaring makabuluhang mapalawak ang karaniwang mga kakayahan ng Python sa jupyter lab, samakatuwid, magpatuloy tayo :)

PS Ang kagiliw-giliw na bagay ay ang lumang pagpapatupad jupyter sa ilalim ng code name Jupiter Notebook ay hindi nawala at ito ay umiiral sa parallel sa jupyter lab. Upang lumipat sa lumang bersyon, sundan ang link na nagdaragdag ng suffix sa address/tree, at ang paglipat sa bagong bersyon ay isinasagawa gamit ang suffix /lab, ngunit hindi ito kailangang tukuyin:

Pagpapalawak ng mga kakayahan ng Python ^

Sa seksyong ito, mag-i-install kami ng napakalakas na mga module ng wikang Python gaya ng numpy, Pandas, matplotlib, IPyWidgets ang mga resulta nito ay isinama sa mga laptop jupyter lab.

Bago i-install ang nakalistang mga module ng Python sa pamamagitan ng manager ng package pip kailangan muna nating lutasin ang mga dependency ng system sa Alpine Linux:

  • g++ — Kailangan para sa pag-compile ng mga module, dahil ang ilan sa mga ito ay ipinatupad sa wika C + + at kumonekta sa Python sa runtime bilang binary modules
  • freetype-dev - dependency para sa Python module matplotlib

Pag-install ng mga dependency:

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

Mayroong isang problema: sa kasalukuyang estado ng pamamahagi ng Alpine Linux, hindi posible na i-compile ang bagong bersyon ng NumPy; lilitaw ang isang error sa compilation na hindi ko malutas:

ERROR: Hindi makabuo ng mga gulong para sa numpy na gumagamit ng PEP 517 at hindi direktang mai-install

Samakatuwid, i-install namin ang module na ito bilang isang package ng system na namamahagi ng isang naka-compile na bersyon, ngunit mas luma nang kaunti kaysa sa kasalukuyang magagamit sa site:

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

Susunod, i-install ang mga module ng Python sa pamamagitan ng manager ng package pip. Mangyaring maging matiyaga dahil ang ilang mga module ay mag-iipon at maaaring tumagal ng ilang minuto. Sa aking makina, ang compilation ay tumagal ng ~15 minuto:

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

Pag-clear ng mga cache ng pag-install:

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

Pagsubok ng mga module sa JupyterLab ^

Kung ikaw ay tumatakbo jupyter lab, i-restart ito para ma-activate ang mga bagong install na module. Upang gawin ito, sa isang console session, i-click CTRL+C kung saan mo ito pinapatakbo at pumasok y upang ihinto ang paghiling at pagkatapos ay magsimulang muli jupyter lab sa pamamagitan ng pagpindot sa pataas na arrow sa keyboard upang hindi na muling ipasok ang command at pagkatapos Enter upang simulan ito:

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

Pumunta sa pahina http://10.0.5.5:8888/lab o i-refresh ang pahina sa iyong browser, at pagkatapos ay ilagay ang sumusunod na code sa isang bagong notebook cell:

%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

Dapat kang makakuha ng isang resulta tulad ng sa larawan sa ibaba, kung saan IPyWidgets bumubuo ng elemento ng UI sa page na nakikipag-ugnayan nang interactive sa source code, at gayundin matplotlib ipinapakita ang resulta ng code sa anyo ng isang larawan bilang isang function graph:

Inilunsad ang Jupyter sa LXD orbit

Maraming halimbawa IPyWidgets mahahanap mo ito sa mga tutorial dito

Ano pa? ^

Mahusay kung nanatili ka at naabot mo ang pinakadulo ng artikulo. Sinadya kong hindi mag-post ng isang handa na script sa dulo ng artikulo na mag-i-install jupyter lab sa "isang pag-click" upang hikayatin ang mga manggagawa :) Ngunit magagawa mo ito sa iyong sarili, dahil alam mo na kung paano, na nakolekta ang mga utos sa isang solong script ng Bash :)

Maaari mo ring:

  • Magtakda ng pangalan ng network para sa lalagyan sa halip na isang IP address sa pamamagitan ng pagsulat nito sa isang simple /etc/hosts at i-type ang address sa browser http://jupyter.local:8888
  • Maglaro sa limitasyon ng mapagkukunan para sa lalagyan, para dito basahin ang kabanata sa mga pangunahing kakayahan sa LXD o makakuha ng higit pang impormasyon sa site ng developer ng LXD.
  • Baguhin ang tema:

Inilunsad ang Jupyter sa LXD orbit

At marami ka pang magagawa! Iyon lang. Nais kong tagumpay ka!

I-UPDATE: 15.04.2020/18/30 XNUMX:XNUMX - Naitama ang mga error sa kabanata na “Hello, World!”
I-UPDATE: 16.04.2020/10/00 XNUMX:XNUMX — Iwasto at idinagdag ang text sa paglalarawan ng extension manager activation jupyter lab
I-UPDATE: 16.04.2020/10/40 XNUMX:XNUMX — Itinama ang mga error na natagpuan sa teksto at bahagyang binago para sa mas mahusay na kabanata "Pag-install ng pangunahing software at pag-set up ng system"

Pinagmulan: www.habr.com

Magdagdag ng komento