آیا تا به حال مجبور شده اید که کد یا ابزارهای سیستمی را در لینوکس آزمایش کنید تا نگران سیستم پایه نباشید و در صورت بروز خطا در کدی که باید با حقوق ریشه اجرا شود، همه چیز را خراب نکنید؟
اما در مورد این واقعیت که فرض کنید باید کلستری از میکروسرویسهای مختلف را روی یک ماشین آزمایش یا اجرا کنید، چطور؟ صد یا حتی هزار؟
با ماشین های مجازی که توسط یک هایپروایزر مدیریت می شوند، چنین مشکلاتی می توانند حل شوند و حل خواهند شد، اما به چه قیمتی؟ به عنوان مثال، یک کانتینر در LXD مبتنی بر توزیع Alpine Linux فقط مصرف می کند 7.60MB
RAM و جایی که پارتیشن ریشه بعد از راه اندازی اشغال می کند 9.5MB
! ایلان ماسک چگونه آن را دوست داری؟ توصیه می کنم بررسی کنید قابلیت های اساسی LXD - یک سیستم کانتینری در لینوکس
بعد از اینکه به طور کلی مشخص شد که کانتینرهای LXD چیست، بیایید جلوتر برویم و فکر کنیم، چه میشد اگر چنین پلتفرم برداشتکنندهای وجود داشت که میتوانستید با خیال راحت کد را برای میزبان اجرا کنید، نمودارها را تولید کنید، ویجتهای UI را به صورت پویا (به صورت تعاملی) با کد خود پیوند دهید. تکمیل کد با متن با بلک جک ... قالب بندی؟ نوعی وبلاگ تعاملی؟ وای... دلم میخواد! می خواهی! 🙂
به زیر گربه نگاه کنید که در یک ظرف پرتاب خواهیم کرد آزمایشگاه ژوپیتر - نسل بعدی رابط کاربری به جای نوت بوک قدیمی Jupyter و همچنین ماژول های پایتون مانند NumPy, پانداها, matplotlib, IPyWidgets که به شما امکان می دهد تمام کارهای ذکر شده در بالا را انجام دهید و همه آنها را در یک فایل خاص - یک لپ تاپ IPython - ذخیره کنید.
ناوبری
- طرح برخاستن مداری
- نصب و پیکربندی سیستم پایه
- نصب نرم افزارهای اولیه و راه اندازی سیستم
- نصب و پیکربندی JupyterLab
- به اشتراک گذاری داده ها با میزبان
- سلام دنیا!
- گسترش قابلیت های پایتون
- تست ماژول ها در JupyterLab
- چه چیز دیگری؟
طرح برخاستن مداری ^
بیایید یک برنامه اقدام مختصر را ترسیم کنیم تا اجرای طرح بالا را برای ما آسانتر کند:
- بیایید یک کانتینر بر اساس کیت توزیع نصب و راه اندازی کنیم آلپ لینوکس. ما از این توزیع استفاده خواهیم کرد زیرا هدف آن مینیمالیسم است و فقط ضروری ترین نرم افزار را در آن نصب می کنیم، هیچ چیز اضافی نیست.
- بیایید یک دیسک مجازی اضافی در ظرف اضافه کنیم و نامی برای آن بگذاریم -
hostfs
و آن را به سیستم فایل ریشه نصب کنید. این دیسک امکان استفاده از فایلهای روی هاست را از یک دایرکتوری مشخص در داخل کانتینر فراهم میکند. بنابراین، داده های ما مستقل از ظرف خواهد بود. اگر کانتینر حذف شود، داده ها در هاست باقی می مانند. همچنین، این طرح برای به اشتراک گذاری داده های مشابه بین بسیاری از کانتینرها بدون استفاده از مکانیسم های شبکه استاندارد توزیع کانتینر مفید است. - بیایید Bash، sudo، کتابخانه های لازم را نصب کنیم، یک کاربر سیستم را اضافه و پیکربندی کنیم
- بیایید پایتون، ماژول ها را نصب کنیم و وابستگی های باینری را برای آنها کامپایل کنیم
- بیایید نصب و راه اندازی کنیم آزمایشگاه ژوپیتر، ظاهر را سفارشی کنید، پسوندها را برای آن نصب کنید.
در این مقاله ما با راه اندازی کانتینر شروع می کنیم، نصب و پیکربندی LXD را در نظر نخواهیم گرفت، می توانید همه اینها را در مقاله دیگری بیابید - ویژگی های اساسی سیستم های کانتینر LXD - Linux.
نصب و پیکربندی سیستم پایه ^
ما با دستوری که در آن تصویر را مشخص می کنیم یک ظرف ایجاد می کنیم - alpine3
، شناسه کانتینر - jupyterlab
و در صورت لزوم، پروفایل های پیکربندی:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
در اینجا من از یک نمایه پیکربندی استفاده می کنم hddroot
که مشخص می کند یک ظرف با پارتیشن ریشه در آن ایجاد شود استخر ذخیره سازی واقع بر روی یک دیسک HDD فیزیکی:
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 |
+------------+---------+------------------+--------------+
نصب نرم افزارهای اولیه و راه اندازی سیستم ^
برای مدیریت کانتینر ما، باید نرم افزار زیر را نصب کنید:
بسته
توضیحات:
بر هم زدن
پوسته GNU Bourne Again
bash-completing
تکمیل قابل برنامه ریزی برای پوسته bash
کد: sudo
به کاربران خاصی این امکان را بدهید که برخی از دستورات را به صورت روت اجرا کنند
سایه
مجموعه ابزار مدیریت رمز عبور و حساب با پشتیبانی از فایل های سایه و PAM
tzdata
منابع منطقه زمانی و داده های زمان تابستانی
نانو
شبیه سازی ویرایشگر Pico با پیشرفت ها
علاوه بر این، می توانید با نصب بسته های زیر، پشتیبانی را در صفحات man-page نصب کنید man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
بیایید به دستورات و کلیدهایی که استفاده کردیم نگاه کنیم:
lxc
- با مشتری LXD تماس بگیریدexec
- متد مشتری LXD که دستوری را در کانتینر اجرا می کندjupyterlab
- شناسه کانتینر--
- یک کلید ویژه که مشخص می کند کلیدهای دیگر را به عنوان کلید برای تفسیر نکنیدlxc
و بقیه رشته را همانطور که هست به ظرف رد کنیدapk
- مدیر بسته توزیع لینوکس آلپاین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 برای کاربران جدید در کانتینر صرف نکنیم، در مراحل زیر فایل های اسکلت آماده را از سیستم میزبان در آن کپی می کنیم. این به شما امکان می دهد Bash را در یک ظرف به صورت تعاملی زیبا کنید. سیستم میزبان من Manjaro Linux است و فایل ها در حال کپی هستند /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
در اصل آنها برای لینوکس آلپاین مناسب هستند و مشکلات مهمی ایجاد نمی کنند، اما ممکن است توزیع متفاوتی داشته باشید و باید به طور مستقل متوجه شوید که آیا هنگام اجرای Bash در کانتینر خطایی وجود دارد یا خیر.
فایل های اسکلت را در ظرف کپی کنید. کلید --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
آلپاین لینوکس یک پوسته سیستم را برای کاربران نصب می کند /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 ^
آزمایشگاه ژوپیتر یک برنامه پایتون است، بنابراین ابتدا باید این مفسر را نصب کنیم. همچنین، آزمایشگاه ژوپیتر ما با استفاده از مدیریت بسته پایتون نصب خواهیم کرد pip
، و نه سیستمی، زیرا ممکن است در مخزن سیستم قدیمی شده باشد و بنابراین، ما باید به صورت دستی وابستگی های آن را با نصب بسته های زیر حل کنیم - python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
بیایید ماژول های پایتون و مدیریت بسته را به روز کنیم 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
. مشکل این است که هیچ پارامتری در دستور راه اندازی وجود ندارد که بتوان آن را به دایرکتوری منتقل کرد؛ برنامه فقط یک متغیر محیطی را می پذیرد و بنابراین باید آن را تعریف کنیم. برای این کار دستور variable export را می نویسیم 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
- تم UIjupyterlab_neon_theme
- تم UIjupyterlab-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 مسئول نیست:
با این حال، ما کل را منزوی می کنیم آزمایشگاه ژوپیتر و آن را در یک ظرف قرار دهید تا افزونه های شخص ثالثی که به NodeJS نیاز دارند و از آنها استفاده می کنند، نتوانند حداقل داده های موجود در دیسک را به غیر از آنهایی که در داخل کانتینر باز می کنیم، بدزدند. به اسناد خصوصی خود در هاست دسترسی پیدا کنید /home
بعید است که فرآیندهای کانتینر با موفقیت انجام شوند، و اگر موفق شوند، پس باید روی فایلهای موجود در سیستم میزبان امتیاز داشته باشید، زیرا ما کانتینر را در حالت بدون امتیاز. بر اساس این اطلاعات، می توانید خطر گنجاندن برنامه های افزودنی را ارزیابی کنید آزمایشگاه ژوپیتر.
نوت بوک های IPython (صفحات در آزمایشگاه ژوپیتر) اکنون در فهرست اصلی کاربر ایجاد می شود - /home/jupyter
، اما برنامه های ما این است که داده ها (اشتراک گذاری) را بین میزبان و کانتینر تقسیم کنیم، بنابراین به کنسول برگردید و متوقف شوید آزمایشگاه ژوپیتر با اجرای کلید میانبر - CTRL+C
و پاسخ دادن y
در صورت درخواست سپس جلسه تعاملی کاربر را خاتمه دهید jupyter
تکمیل کلید میانبر CTRL+D
.
به اشتراک گذاری داده ها با میزبان ^
برای به اشتراک گذاشتن داده ها با هاست، باید یک دستگاه در کانتینر ایجاد کنید که به شما امکان انجام این کار را می دهد و برای انجام این کار، دستور زیر را اجرا کنید که در آن کلیدهای زیر را مشخص می کنیم:
lxc config device add
- فرمان پیکربندی دستگاه را اضافه می کندjupyter
- شناسه ظرفی که پیکربندی به آن اضافه شده استhostfs
- شناسه دستگاه. شما می توانید هر نامی را تنظیم کنید.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 و اولین لپ تاپ خود را با کلیک بر روی دکمه موجود در صفحه همانطور که در تصویر زیر نشان داده شده است ایجاد کنید:
سپس در فیلد صفحه، کد پایتون را وارد کنید که کلاسیک را نمایش می دهد Hello World!
. پس از اتمام ورود، فشار دهید CTRL+ENTER
یا دکمه "play" را در نوار ابزار در بالا انجام دهید تا JupyterLab این کار را انجام دهد:
در این مرحله، تقریباً همه چیز برای استفاده آماده است، اما اگر ماژول های اضافی پایتون (برنامه های کاربردی کامل) را نصب نکنیم که می توانند قابلیت های استاندارد پایتون را به میزان قابل توجهی گسترش دهند، جالب نخواهد بود. آزمایشگاه ژوپیترپس بریم جلو :)
PS نکته جالب این است که اجرای قدیمی است ژوپیتر تحت نام رمز نوت بوک ژوپیتر از بین نرفته است و به موازات آن وجود دارد آزمایشگاه ژوپیتر. برای تغییر به نسخه قدیمی، پیوندی را دنبال کنید که پسوند را در آدرس اضافه می کند/tree
، و انتقال به نسخه جدید با پسوند انجام می شود /lab
، اما لازم نیست مشخص شود:
- نوت بوک ژوپیتر - http://10.0.5.5:8888/tree
- آزمایشگاه ژوپیتر - http://10.0.5.5:8888/lab
گسترش قابلیت های پایتون ^
در این بخش ماژول های قدرتمند زبان پایتون را نصب خواهیم کرد NumPy, پانداها, matplotlib, IPyWidgets که نتایج آن در لپ تاپ ها ادغام شده است آزمایشگاه ژوپیتر.
قبل از نصب ماژول های لیست شده پایتون از طریق مدیر بسته pip
ابتدا باید وابستگی های سیستم را در Alpine Linux حل کنیم:
g++
- برای کامپایل ماژول ها مورد نیاز است، زیرا برخی از آنها در زبان پیاده سازی می شوند ++C و در زمان اجرا به صورت ماژول های باینری به پایتون متصل شویدfreetype-dev
- وابستگی برای ماژول پایتون matplotlib
نصب وابستگی ها:
lxc exec jupyterlab -- apk add g++ freetype-dev
یک مشکل وجود دارد: در وضعیت فعلی توزیع لینوکس آلپاین، امکان کامپایل نسخه جدید NumPy وجود نخواهد داشت؛ یک خطای کامپایل ظاهر می شود که من نتوانستم آن را برطرف کنم:
ERROR: امکان ساخت چرخ هایی برای Numpy وجود ندارد که از PEP 517 استفاده می کنند و نمی توانند مستقیماً نصب شوند.
بنابراین، ما این ماژول را به عنوان یک بسته سیستمی نصب خواهیم کرد که یک نسخه از قبل کامپایل شده را توزیع می کند، اما کمی قدیمی تر از آنچه در حال حاضر در سایت موجود است:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
در مرحله بعد، ماژول های پایتون را از طریق مدیر بسته نصب کنید 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 در صفحه ایجاد می کند که به صورت تعاملی با کد منبع تعامل دارد و همچنین matplotlib نتیجه کد را در قالب یک تصویر به عنوان نمودار تابع نمایش می دهد:
مثال های زیادی IPyWidgets می توانید آن را در آموزش ها پیدا کنید اینجا
چه چیز دیگری؟ ^
آفرین اگر ماندید و به انتهای مقاله رسیدید. من عمداً یک اسکریپت آماده را در انتهای مقاله ارسال نکردم که نصب شود آزمایشگاه ژوپیتر در "یک کلیک" برای تشویق کارگران :) اما می توانید خودتان این کار را انجام دهید، زیرا قبلاً می دانید که چگونه دستورات را در یک اسکریپت Bash جمع آوری کرده اید :)
شما همچنین می توانید:
- با نوشتن یک آدرس ساده، یک نام شبکه برای کانتینر به جای آدرس IP تنظیم کنید
/etc/hosts
و آدرس را در مرورگر تایپ کنید http://jupyter.local:8888 - با محدودیت منابع برای ظرف بازی کنید، برای این، فصل را بخوانید قابلیت های اولیه LXD یا اطلاعات بیشتر را در سایت توسعه دهنده LXD دریافت کنید.
- تغییر تم:
و خیلی بیشتر که می توانید انجام دهید! همین. آرزو می کنم موفق شوی!
به روز رسانی: 15.04.2020/18/30 XNUMX:XNUMX - تصحیح اشتباهات در فصل "سلام، جهان!"
به روز رسانی: 16.04.2020/10/00 ساعت XNUMX:XNUMX - متن اصلاح شده و اضافه شده در توضیحات فعال سازی مدیر برنامه افزودنی آزمایشگاه ژوپیتر
به روز رسانی: 16.04.2020/10/40 XNUMX:XNUMX — خطاهای موجود در متن تصحیح شد و فصل "نصب نرم افزار پایه و راه اندازی سیستم" کمی تغییر کرد.
منبع: www.habr.com