Kísérleteznie kellett már Linuxon kóddal vagy rendszer-segédprogramokkal anélkül, hogy aggódnia kellett volna az alapul szolgáló rendszer miatt, és mindent le kellett volna bontania, ha a kódban hibás lenne, ha root jogosultságokkal kellene futnia?
De mi van azzal a ténnyel, hogy tegyük fel, hogy egy gépen különféle mikroszolgáltatások egész klaszterét kell tesztelnie vagy futtatnia? Száz vagy akár ezer?
A hypervisor által kezelt virtuális gépekkel az ilyen problémákat meg lehet és meg is oldják, de milyen áron? Például egy LXD-ben az Alpine Linux disztribúción alapuló tároló csak fogyaszt 7.60MB
RAM, és ahol a gyökérpartíció elfoglalja az indítást követően 9.5MB
! Hogy tetszik ez neked, Elon Musk? Azt javaslom, nézd meg az LXD alapvető képességei – egy konténerrendszer Linuxban
Miután általánosságban kiderült, hogy mik is azok az LXD konténerek, menjünk tovább, és gondoljuk át, mi lenne, ha lenne egy ilyen arató platform, ahol biztonságosan futtathatná a gazdagép kódját, grafikonokat generálhatna, dinamikusan (interaktívan) összekapcsolhatná a felhasználói felület widgeteket a kódjával, kiegészíteni a kódot szöveggel blackjack... formázással? Valami interaktív blog? Wow... akarom! Akar! 🙂
Nézz a macska alá, ahol konténerben indítjuk jupyter labor - az elavult Jupyter Notebook helyett a következő generációs felhasználói felület, valamint Python modulokat is telepítünk, mint pl. numpy, pandák, matplotlib, IPyWidgets amely lehetővé teszi a fent felsorolt mindent megtehet, és mindezt elmentheti egy speciális fájlba - egy IPython laptopba.
Navigáció
- Orbitális felszállási terv
- Az alaprendszer telepítése és konfigurálása
- Alapszoftver telepítése és a rendszer beállítása
- A JupyterLab telepítése és konfigurálása
- Adatok megosztása a gazdagéppel
- Helló Világ!
- A Python képességeinek bővítése
- Modulok tesztelése a JupyterLabban
- Mi más?
Orbitális felszállási terv ^
Vázoljunk fel egy rövid cselekvési tervet, hogy megkönnyítsük a fenti séma megvalósítását:
- Telepítsünk és indítsunk el egy konténert az elosztókészlet alapján Alpesi Linux. Azért fogjuk ezt a disztribúciót használni, mert a minimalizmusra törekszik, és csak a legszükségesebb szoftvereket telepíti bele, semmi felesleges.
- Adjunk hozzá egy további virtuális lemezt a tárolóhoz, és adjunk neki nevet -
hostfs
és csatolja a gyökér fájlrendszerhez. Ez a lemez lehetővé teszi a tárolóban lévő adott könyvtárból a gazdagépen lévő fájlok használatát. Így adataink függetlenek lesznek a tárolótól. Ha a tárolót törlik, az adatok a gazdagépen maradnak. Ez a séma akkor is hasznos, ha ugyanazokat az adatokat sok tároló között osztja meg a tárolóelosztás szabványos hálózati mechanizmusainak használata nélkül. - Telepítsük a Bash-t, a sudo-t, a szükséges könyvtárakat, adjunk hozzá és konfiguráljunk rendszerfelhasználót
- Telepítsük a Python-t, a modulokat, és fordítsunk bináris függőséget hozzájuk
- Telepítsük és indítsuk el jupyter labor, testreszabhatja a megjelenést, telepíthet hozzá bővítményeket.
Ebben a cikkben a konténer elindításával kezdjük, az LXD telepítését és konfigurálását nem vesszük figyelembe, mindezt egy másik cikkben találja meg - Az LXD - Linux konténerrendszerek alapvető jellemzői.
Az alaprendszer telepítése és konfigurálása ^
Létrehozunk egy tárolót a paranccsal, amelyben megadjuk a képet - alpine3
, a konténer azonosítója - jupyterlab
és szükség esetén konfigurációs profilok:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
Itt egy konfigurációs profilt használok hddroot
amely meghatározza egy tároló létrehozását gyökérpartícióval Tároló medence fizikai merevlemezen található:
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
Ezzel lehetőségem nyílik kísérletezni a HDD lemezen lévő konténerekkel, megmentve a rendszeremben is elérhető SSD lemez erőforrásait 🙂 amihez külön konfigurációs profilt készítettem ssdroot
.
A tároló létrehozása után az állapotba kerül STOPPED
, ezért el kell indítanunk az init rendszer futtatásával:
lxc start jupyterlab
Jelenítsük meg a konténerek listáját LXD-ben a gomb segítségével -c
amely jelzi, hogy melyik coszlopok megjelenítése:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
A konténer létrehozásakor az IP-címet véletlenszerűen választottuk ki, mivel konfigurációs profilt használtunk default
amelyet korábban a cikkben konfiguráltak Az LXD - Linux konténerrendszerek alapvető jellemzői.
Ezt az IP-címet egy emlékezetesebbre változtatjuk úgy, hogy hálózati interfészt hozunk létre a konténer szintjén, és nem a konfigurációs profil szintjén, ahogyan az most az aktuális konfigurációban van. Ezt nem kell megtenned, kihagyhatod.
Hálózati interfész létrehozása eth0
amelyet a kapcsolóhoz kapcsolunk (hálózati híd) lxdbr0
amelyben az előző cikk szerint engedélyeztük a NAT-ot és a konténer ezentúl hozzáfér az internethez, valamint statikus IP címet is rendelünk a felülethez - 10.0.5.5
:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Az eszköz hozzáadása után a tárolót újra kell indítani:
lxc restart jupyterlab
A tároló állapotának ellenőrzése:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
Alapszoftver telepítése és a rendszer beállítása ^
Konténerünk adminisztrálásához telepítenie kell a következő szoftvert:
Csomag
Leírás
horpadás
A GNU Bourne Again shell
bash-befejezés
Programozható kiegészítés a bash shellhez
sudo
Adjon lehetőséget bizonyos felhasználóknak, hogy néhány parancsot rootként futtassanak
árnyék
Jelszó- és fiókkezelő eszközcsomag árnyékfájlok és PAM támogatásával
tzdata
Az időzóna és a nyári időszámítás adatok forrásai
nano
Pico szerkesztő klón fejlesztésekkel
Ezenkívül telepítheti a támogatást a rendszer kézikönyvlapjain a következő csomagok telepítésével - man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
Nézzük az általunk használt parancsokat és billentyűket:
lxc
— Hívja az LXD klienstexec
- LXD kliens metódus, amely parancsot futtat a tárolóbanjupyterlab
— Tárolóazonosító--
- Speciális kulcs, amely megadja, hogy a további kulcsokat ne értelmezze a következő kulcsakéntlxc
és adja át a húr többi részét a tárolónakapk
— Alpine Linux disztribúciós csomagkezelőadd
— Csomagkezelő metódus, amely a parancs után megadott csomagokat telepíti
Ezután beállítunk egy időzónát a rendszerben Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Az időzóna telepítése után a csomag tzdata
már nincs szükség a rendszerben, helyet foglal, ezért töröljük:
lxc exec jupyterlab -- apk del tzdata
Az időzóna ellenőrzése:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
Annak érdekében, hogy ne töltsön sok időt a Bash beállításával az új felhasználók számára a tárolóban, a következő lépésekben a kész skel fájlokat átmásoljuk a gazdagép rendszerből. Ez lehetővé teszi, hogy interaktívan szépítse a Bash-t egy tárolóban. A gazdagépem a Manjaro Linux, és a fájlok másolása folyamatban van /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
elvileg alkalmasak az Alpine Linuxra, és nem okoznak kritikus problémákat, de előfordulhat, hogy más disztribúciója van, és önállóan kell kitalálnia, hogy van-e hiba a Bash futtatásakor a tárolóban.
Másolja a skel fájlokat a tárolóba. Kulcs --create-dirs
létrehozza a szükséges könyvtárakat, ha nem léteznek:
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ár létező root felhasználó esetén másolja a tárolóba most bemásolt skel fájlokat a kezdőkönyvtárba:
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
Az Alpine Linux rendszerhéjat telepít a felhasználók számára /bin/sh
, azt helyettesítjük root
felhasználó a Bashban:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
Hogy root
a felhasználó nem volt jelszó nélküli, jelszót kell beállítania. A következő parancs generál és állít be neki egy új véletlenszerű jelszót, amelyet a végrehajtás után a konzol képernyőjén fog látni:
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
Ezenkívül hozzunk létre egy új rendszerfelhasználót - jupyter
amihez később konfiguráljuk jupyter labor:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
Hozzuk létre és állítsuk be a jelszót:
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
Ezután két parancsot hajtunk végre, az első egy rendszercsoportot hoz létre sudo
, a második pedig hozzáad egy felhasználót hozzá jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
Nézzük, milyen csoportokba tartozik a felhasználó jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
Minden rendben, menjünk tovább.
Engedélyezze az összes olyan felhasználót, aki tagja a csoportnak sudo
használja a parancsot sudo
. Ehhez futtassa a következő szkriptet, ahol sed
törli a paramétersor megjegyzéseit a konfigurációs fájlban /etc/sudoers
:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"
A JupyterLab telepítése és konfigurálása ^
jupyter labor Python alkalmazás, ezért először telepítenünk kell ezt az értelmezőt. Is, jupyter labor a Python csomagkezelővel fogjuk telepíteni pip
, és nem a rendszer, mert előfordulhat, hogy elavult a rendszer lerakatában, és ezért manuálisan kell feloldanunk a függőségeket a következő csomagok telepítésével - python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
Frissítsük a python modulokat és a csomagkezelőt pip
az aktuális verzióhoz:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
Készlet jupyter labor csomagkezelőn keresztül pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
Mivel a bővítmények be jupyter labor kísérleti jellegűek, és hivatalosan nem szállítják a jupyterlab csomaggal, ezért manuálisan kell telepítenünk és konfigurálnunk.
Telepítsük a NodeJS-t és a hozzá tartozó csomagkezelőt - NPM-et, mivel jupyter labor ezeket használja a kiterjesztéséhez:
lxc exec jupyterlab -- apk add nodejs npm
Kiterjesztésekhez a következőhöz jupyter labor amelyeket telepíteni fogunk, működtek, azokat a felhasználói könyvtárba kell telepíteni, mivel az alkalmazás a felhasználótól indul el jupyter
. A probléma az, hogy az indítási parancsban nincs olyan paraméter, amelyet át lehetne adni egy könyvtárnak, az alkalmazás csak egy környezeti változót fogad el, ezért azt meg kell határoznunk. Ehhez megírjuk a változó export parancsot JUPYTERLAB_DIR
a felhasználó környezetében jupyter
, fájlhoz .bashrc
amely minden alkalommal lefut, amikor a felhasználó bejelentkezik:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
A következő parancs egy speciális bővítményt telepít - kiterjesztéskezelőt jupyter labor:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
Most minden készen áll az első indításra jupyter labor, de még telepíthetünk néhány hasznos bővítményt:
toc
— Tartalomjegyzék, címlistát állít elő egy cikkben/jegyzetfüzetbenjupyterlab-horizon-theme
- UI témajupyterlab_neon_theme
- UI témajupyterlab-ubu-theme
- Másik téma a szerzőtől ezt a cikket :) De ebben az esetben a GitHub tárolóból való telepítés lesz látható
Tehát futtassa egymás után a következő parancsokat a bővítmények telepítéséhez:
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"
A bővítmények telepítése után le kell fordítanunk őket, mivel korábban a telepítés során megadtuk a kulcsot --no-build
időt spórolni. Most jelentősen felgyorsítjuk, ha egy menetben összeállítjuk őket:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
Most futtassa a következő két parancsot az első futtatáshoz jupyter labor. Egy paranccsal elindítható lenne, de ebben az esetben a nehezen megjegyezhető indítási parancsot a tárolóban lévő bash fogja megjegyezni, és nem a gazdagépen, ahol már van elég parancs bejegyezni őket a történelembe :)
Felhasználóként jelentkezzen be a tárolóba jupyter
:
lxc exec jupyterlab -- su -l jupyter
Következő, fuss jupyter labor a jelzett kulcsokkal és paraméterekkel:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
Nyissa meg a címet a böngészőjében http://10.0.5.5:8888 és a megnyíló oldalon írja be jelképes hozzáférést, amelyet a konzolon fog látni. Másolja ki és illessze be az oldalra, majd kattintson Bejelentkezés. Bejelentkezés után lépjen a bal oldali bővítmények menübe az alábbi ábrán látható módon, ahol a kiterjesztéskezelő aktiválásakor felkérést kap arra, hogy vállaljon biztonsági kockázatot harmadik féltől származó bővítmények telepítésével, amelyekhez a parancsot JupyterLab fejlesztés nem vállal felelősséget:
Azonban az egészet elkülönítjük jupyter labor és helyezze el egy tárolóba, hogy a NodeJS-t igénylő és használó harmadik féltől származó bővítmények legalább ne lophassanak el más adatokat a lemezen, kivéve azokat, amelyeket a tárolóban megnyitunk. Nyissa meg személyes dokumentumait a gazdagépen /home
a tárolóból származó folyamatok valószínűleg nem fognak sikerülni, és ha igen, akkor jogosultságokkal kell rendelkeznie a gazdarendszeren lévő fájlokhoz, mivel a tárolót privilegizált mód. Ezen információk alapján felmérheti a bővítmények felvételének kockázatát jupyter labor.
IPython-jegyzetfüzeteket hozott létre (oldalak in jupyter labor) most létrejön a felhasználó kezdőkönyvtárában - /home/jupyter
, de az a terveink, hogy felosztjuk az adatokat (megosztást) a gazdagép és a tároló között, ezért térjünk vissza a konzolhoz és álljunk le jupyter labor a gyorsbillentyű végrehajtásával - CTRL+C
és válaszol y
kérésre. Ezután fejezze be a felhasználó interaktív munkamenetét jupyter
egy gyorsbillentyű kitöltése CTRL+D
.
Adatok megosztása a gazdagéppel ^
Az adatok megosztásához a gazdagéppel létre kell hozni egy eszközt a tárolóban, amely lehetővé teszi ezt, és ehhez futtassa a következő parancsot, ahol a következő kulcsokat adjuk meg:
lxc config device add
— A parancs hozzáadja az eszközkonfigurációtjupyter
— Annak a tárolónak az azonosítója, amelyhez a konfigurációt hozzáadtákhostfs
- Eszköz azonosító. Bármilyen nevet beállíthat.disk
— Megjelenik az eszköz típusapath
— Megadja azt az elérési utat a tárolóban, amelyhez az LXD csatlakoztatni fogja ezt az eszköztsource
— Adja meg a forrást, a tárolóval megosztani kívánt gazdagépen található könyvtár elérési útját. Adja meg az útvonalat preferenciái szerint
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
A katalógushoz /home/dv/projects/ipython-notebooks
Az engedélyt annak a tárolófelhasználónak kell beállítania, akinek jelenleg egyenlő az UID SubUID + UID
, lásd a fejezetet Biztonság. Tárolójogok cikkben Az LXD - Linux konténerrendszerek alapvető jellemzői.
Állítsa be az engedélyt a gazdagépen, ahol a tulajdonos lesz a tároló felhasználója jupyter
, és a változó $USER
csoportként határozza meg a gazdagép felhasználóját:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
Helló Világ! ^
Ha még mindig nyitva van egy konzolmunkamenet a tárolóban a következővel: jupyter labor, majd indítsa újra egy új kulccsal --notebook-dir
az érték beállításával /mnt/hostfs
mint az előző lépésben létrehozott eszköz tárolójában lévő laptopok gyökerének elérési útja:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Ezután lépjen az oldalra http://10.0.5.5:8888 és készítse el első laptopját az oldalon található gombra kattintva az alábbi képen látható módon:
Ezután az oldalon lévő mezőbe írja be a Python kódot, amely megjeleníti a klasszikust Hello World!
. Ha befejezte a bevitelt, nyomja meg a gombot CTRL+ENTER
vagy a tetején lévő eszköztár „lejátszás” gombjával, hogy a JupyterLab ezt tegye:
Ezen a ponton szinte minden készen áll a használatra, de érdektelen lesz, ha nem telepítünk további Python modulokat (teljes értékű alkalmazásokat), amelyek jelentősen bővíthetik a Python szabványos képességeit jupyter laborszóval lépjünk tovább :)
PS Az az érdekes, hogy a régi megvalósítás jupyter kódnév alatt Jupyter Jegyzetfüzet nem tűnt el, és ezzel párhuzamosan létezik jupyter labor. A régi verzióra való váltáshoz kövesse a hivatkozást, és adja hozzá az utótagot a címhez/tree
, az új verzióra való áttérés pedig az utótaggal történik /lab
, de nem kell megadni:
- Jupyter jegyzetfüzet - http://10.0.5.5:8888/tree
- Jupyter Lab - http://10.0.5.5:8888/lab
A Python képességeinek bővítése ^
Ebben a részben olyan hatékony Python nyelvi modulokat fogunk telepíteni, mint numpy, pandák, matplotlib, IPyWidgets amelyek eredményeit laptopokba integrálják jupyter labor.
Mielőtt telepítené a felsorolt Python modulokat a csomagkezelőn keresztül pip
először meg kell oldanunk a rendszerfüggőségeket az Alpine Linuxban:
g++
— Modulok összeállításához szükséges, mivel ezek egy része a nyelven implementálva van C + + és futásidőben bináris modulokként csatlakozzon a Pythonhozfreetype-dev
- függőség a Python modultól matplotlib
Függőségek telepítése:
lxc exec jupyterlab -- apk add g++ freetype-dev
Egy probléma van: az Alpine Linux disztribúció jelenlegi állapotában nem lehet lefordítani a NumPy új verzióját, megjelenik egy fordítási hiba, amelyet nem tudtam megoldani:
ERROR: A PEP 517-et használó, közvetlenül nem szerelhető kerekeket nem lehet tönkretenni
Ezért ezt a modult rendszercsomagként fogjuk telepíteni, amely egy már lefordított verziót terjeszt, de egy kicsit régebbi, mint ami jelenleg elérhető az oldalon:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
Ezután telepítse a Python modulokat a csomagkezelőn keresztül pip
. Kérjük, legyen türelemmel, mert egyes modulok összeállnak, és ez néhány percet is igénybe vehet. Az én gépemen az összeállítás ~15 percig tartott:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
Telepítési gyorsítótárak törlése:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
Modulok tesztelése a JupyterLabban ^
Ha futsz jupyter labor, indítsa újra, hogy az újonnan telepített modulok aktiválódjanak. Ehhez egy konzolmunkamenetben kattintson a gombra CTRL+C
ahol fut, és lépjen be y
a kérés leállításához, majd újraindításához jupyter labor a felfelé mutató nyíl megnyomásával a billentyűzeten, hogy ne írja be újra a parancsot, majd ezután Enter
kezdeni:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Ugrás az oldalra http://10.0.5.5:8888/lab vagy frissítse az oldalt a böngészőben, majd írja be a következő kódot egy új jegyzetfüzet cellába:
%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
Az alábbi képen látható eredményt kell kapnia, hol IPyWidgets létrehoz egy felhasználói felület elemet az oldalon, amely interaktívan kölcsönhatásba lép a forráskóddal, és azt is matplotlib a kód eredményét kép formájában, függvénygrafikonként jeleníti meg:
Sok példa IPyWidgets az oktatóanyagokban megtalálod itt
Mi más? ^
Jól tetted, ha maradtál, és a cikk végére értél. Szándékosan nem tettem fel egy kész szkriptet a cikk végére, ami telepítené jupyter labor "egy kattintással" a dolgozók ösztönzésére :) De ezt megteheted magad is, hiszen már tudod, hogyan kell, miután összegyűjtötted a parancsokat egyetlen Bash szkriptbe :)
Te is:
- Állítson be egy hálózatnevet a tárolóhoz IP-cím helyett úgy, hogy egyszerűen írja be
/etc/hosts
és írja be a címet a böngészőbe http://jupyter.local:8888 - Játsszon a tároló erőforrás-korlátozásával, ehhez olvassa el a fejezetet alapvető LXD képességek vagy szerezzen további információkat az LXD fejlesztői webhelyén.
- Téma módosítása:
És még sok minden mást megtehetsz! Ez minden. Sok sikert!
FRISSÍTÉS: 15.04.2020. 18:30 - Hibák javítása a „Hello, World!” fejezetben.
FRISSÍTÉS: 16.04.2020. 10:00 — Javított és hozzáadott szöveg a bővítménykezelő aktiválásának leírásában jupyter labor
FRISSÍTÉS: 16.04.2020. 10:40 — A szövegben talált hibákat javítottuk, és némileg jobbra módosítottuk az „Alapszoftver telepítése és a rendszer beállítása” című fejezetet.
Forrás: will.com