إطلاق Jupyter في LXD Orbit

هل اضطررت يومًا إلى تجربة التعليمات البرمجية أو الأدوات المساعدة للنظام في Linux حتى لا تقلق بشأن النظام الأساسي ولا تمزق كل شيء في حالة حدوث خطأ في الكود الذي يجب أن يعمل بامتيازات الجذر؟

ولكن ماذا عن حقيقة أننا لنفترض أنك بحاجة إلى اختبار أو تشغيل مجموعة كاملة من الخدمات الصغيرة المتنوعة على جهاز واحد؟ مائة أو حتى ألف؟

مع الأجهزة الافتراضية التي يديرها برنامج Hypervisor، يمكن حل مثل هذه المشكلات، ولكن بأي ثمن؟ على سبيل المثال، تستهلك حاوية LXD المستندة إلى توزيع Alpine Linux فقط 7.60MB ذاكرة الوصول العشوائي (RAM)، والمكان الذي يشغله القسم الجذر بعد بدء التشغيل 9.5MB! كيف يعجبك ذلك يا إيلون ماسك؟ أوصي بالخروج القدرات الأساسية لـ LXD - نظام حاوية في Linux

بعد أن أصبح من الواضح بشكل عام ما هي حاويات LXD، دعنا نذهب أبعد من ذلك ونفكر، ماذا لو كان هناك منصة حصاد حيث يمكنك تشغيل التعليمات البرمجية للمضيف بأمان، وإنشاء الرسوم البيانية، وربط عناصر واجهة المستخدم ديناميكيًا (تفاعليًا) مع التعليمات البرمجية الخاصة بك، أكمل الكود بنص باستخدام لعبة البلاك جاك... التنسيق؟ نوع من المدونات التفاعلية؟ واو...أريد ذلك! يريد! 🙂

انظر تحت القطة حيث سننطلق في الحاوية جوبيتر لاب - الجيل التالي من واجهة المستخدم بدلاً من Jupyter Notebook القديم، وسنقوم أيضًا بتثبيت وحدات Python مثل نمباي, الباندا, ماتبلوتليب, IPyWidgets والذي سيسمح لك بالقيام بكل ما هو مذكور أعلاه وحفظه كله في ملف خاص - كمبيوتر محمول IPython.

إطلاق Jupyter في LXD Orbit

خطة الإقلاع المداري ^

إطلاق Jupyter في LXD Orbit

دعونا نحدد خطة عمل مختصرة لتسهيل تنفيذ المخطط أعلاه:

  • لنقم بتثبيت وتشغيل الحاوية بناءً على مجموعة التوزيع ألبين لينكس. سوف نستخدم هذا التوزيع لأنه يهدف إلى البساطة وسوف نقوم بتثبيت البرامج الأكثر أهمية فيه فقط، ولا شيء غير ضروري.
  • دعونا نضيف قرصًا افتراضيًا إضافيًا في الحاوية ونعطيه اسمًا - hostfs وقم بتثبيته على نظام الملفات الجذر. سيتيح هذا القرص استخدام الملفات الموجودة على المضيف من دليل معين داخل الحاوية. وبالتالي، ستكون بياناتنا مستقلة عن الحاوية. إذا تم حذف الحاوية، ستبقى البيانات على المضيف. يعد هذا المخطط مفيدًا أيضًا لمشاركة نفس البيانات بين العديد من الحاويات دون استخدام آليات الشبكة القياسية لتوزيع الحاويات.
  • لنقم بتثبيت Bash وsudo والمكتبات الضرورية وإضافة مستخدم النظام وتكوينه
  • لنقم بتثبيت Python والوحدات النمطية وتجميع التبعيات الثنائية لها
  • لنقم بالتثبيت والتشغيل جوبيتر لاب، تخصيص المظهر، تثبيت ملحقات له.

في هذه المقالة سنبدأ بإطلاق الحاوية، ولن نفكر في تثبيت LXD وتكوينه، يمكنك العثور على كل هذا في مقال آخر - الميزات الأساسية لنظام LXD - Linux Container Systems.

تركيب وتكوين النظام الأساسي ^

نقوم بإنشاء حاوية بالأمر الذي نحدد فيه الصورة - 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 Container Systems.

سنقوم بتغيير عنوان 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

سودو
منح بعض المستخدمين القدرة على تشغيل بعض الأوامر كجذر

ظل
مجموعة أدوات إدارة كلمة المرور والحساب مع دعم ملفات الظل وPAM

تزداتا
مصادر المنطقة الزمنية وبيانات التوقيت الصيفي

نانو
استنساخ محرر بيكو مع التحسينات

بالإضافة إلى ذلك، يمكنك تثبيت الدعم في صفحات دليل النظام عن طريق تثبيت الحزم التالية - 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 - مدير حزمة توزيع 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 المستخدم في باش:

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. تكمن المشكلة في عدم وجود معلمة في أمر التشغيل يمكن تمريرها إلى الدليل؛ فالتطبيق يقبل فقط متغير البيئة وبالتالي يجب علينا تعريفه. للقيام بذلك، سوف نكتب أمر تصدير المتغير 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 - موضوع واجهة المستخدم
  • jupyterlab_neon_theme - موضوع واجهة المستخدم
  • 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 Orbit

ومع ذلك، فإننا نعزل الكل جوبيتر لاب ووضعه في حاوية بحيث لا تتمكن ملحقات الطرف الثالث التي تتطلب 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 Container Systems.

قم بتعيين الإذن على المضيف، حيث سيكون المالك هو مستخدم الحاوية 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 Orbit

ثم، في الحقل الموجود بالصفحة، أدخل كود Python الذي سيعرض الكود الكلاسيكي Hello World!. عند الانتهاء من الإدخال، اضغط على CTRL+ENTER أو زر "تشغيل" الموجود على شريط الأدوات بالأعلى ليقوم JupyterLab بذلك:

إطلاق Jupyter في LXD Orbit

في هذه المرحلة، أصبح كل شيء تقريبًا جاهزًا للاستخدام، ولكن سيكون الأمر غير مثير للاهتمام إذا لم نقم بتثبيت وحدات Python الإضافية (التطبيقات الكاملة) التي يمكنها توسيع القدرات القياسية لـ Python بشكل كبير في جوبيتر لابلذلك دعونا ننتقل :)

PS الشيء المثير للاهتمام هو أن التنفيذ القديم كوكب المشتري تحت اسم الرمز مفكرة Jupyter لم يختفي وهو موجود بالتوازي مع جوبيتر لاب. للتبديل إلى الإصدار القديم، اتبع الرابط الذي يضيف اللاحقة في العنوان/tree، ويتم الانتقال إلى الإصدار الجديد باستخدام اللاحقة /lab، ولكن لا يلزم تحديده:

توسيع قدرات بايثون ^

في هذا القسم، سنقوم بتثبيت وحدات لغة بايثون القوية مثل نمباي, الباندا, ماتبلوتليب, IPyWidgets يتم دمج نتائجها في أجهزة الكمبيوتر المحمولة جوبيتر لاب.

قبل تثبيت وحدات Python المدرجة من خلال مدير الحزم pip يجب علينا أولاً حل تبعيات النظام في Alpine Linux:

  • g++ - مطلوب لتجميع الوحدات، حيث يتم تنفيذ بعضها في اللغة C + + والاتصال بـ Python في وقت التشغيل كوحدات ثنائية
  • freetype-dev - التبعية لوحدة بايثون ماتبلوتليب

تثبيت التبعيات:

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 ينشئ عنصر واجهة مستخدم على الصفحة يتفاعل بشكل تفاعلي مع الكود المصدري، وكذلك ماتبلوتليب يعرض نتيجة الكود على شكل صورة كرسم بياني للوظيفة:

إطلاق Jupyter في LXD Orbit

أمثلة كثيرة IPyWidgets يمكنك العثور عليها في البرامج التعليمية هنا

ماذا بعد؟ ^

أحسنت لو بقيت ووصلت إلى نهاية المقال. لقد تعمدت عدم نشر نص جاهز في نهاية المقالة ليتم تثبيته جوبيتر لاب "بنقرة واحدة" لتشجيع العمال :) ولكن يمكنك القيام بذلك بنفسك، نظرًا لأنك تعرف بالفعل كيفية القيام بذلك، بعد أن جمعت الأوامر في نص Bash واحد :)

بامكانك ايضا:

  • قم بتعيين اسم شبكة للحاوية بدلاً من عنوان IP عن طريق كتابته بخط بسيط /etc/hosts واكتب العنوان في المتصفح http://jupyter.local:8888
  • تعرّف على حدود الموارد الخاصة بالحاوية، ولهذا اقرأ الفصل الموجود فيه قدرات LXD الأساسية أو احصل على مزيد من المعلومات على موقع مطور LXD.
  • تغيير الموضوع:

إطلاق Jupyter في LXD Orbit

وأكثر من ذلك بكثير يمكنك القيام به! هذا كل شئ. أتمنى لك النجاح!

تحديث: 15.04.2020/18/30 XNUMX:XNUMX - تم تصحيح الأخطاء في فصل "Hello, World!"
تحديث: 16.04.2020/10/00 XNUMX:XNUMX - تم تصحيح النص وإضافته في وصف تنشيط مدير الامتدادات جوبيتر لاب
تحديث: 16.04.2020/10/40 XNUMX:XNUMX - تم تصحيح الأخطاء الموجودة في النص وتغيير طفيف للأفضل في الفصل "تثبيت البرامج الأساسية وإعداد النظام"

المصدر: www.habr.com

إضافة تعليق