هل اضطررت يومًا إلى تجربة التعليمات البرمجية أو الأدوات المساعدة للنظام في Linux حتى لا تقلق بشأن النظام الأساسي ولا تمزق كل شيء في حالة حدوث خطأ في الكود الذي يجب أن يعمل بامتيازات الجذر؟
ولكن ماذا عن حقيقة أننا لنفترض أنك بحاجة إلى اختبار أو تشغيل مجموعة كاملة من الخدمات الصغيرة المتنوعة على جهاز واحد؟ مائة أو حتى ألف؟
مع الأجهزة الافتراضية التي يديرها برنامج Hypervisor، يمكن حل مثل هذه المشكلات، ولكن بأي ثمن؟ على سبيل المثال، تستهلك حاوية LXD المستندة إلى توزيع Alpine Linux فقط 7.60MB
ذاكرة الوصول العشوائي (RAM)، والمكان الذي يشغله القسم الجذر بعد بدء التشغيل 9.5MB
! كيف يعجبك ذلك يا إيلون ماسك؟ أوصي بالخروج القدرات الأساسية لـ LXD - نظام حاوية في Linux
بعد أن أصبح من الواضح بشكل عام ما هي حاويات LXD، دعنا نذهب أبعد من ذلك ونفكر، ماذا لو كان هناك منصة حصاد حيث يمكنك تشغيل التعليمات البرمجية للمضيف بأمان، وإنشاء الرسوم البيانية، وربط عناصر واجهة المستخدم ديناميكيًا (تفاعليًا) مع التعليمات البرمجية الخاصة بك، أكمل الكود بنص باستخدام لعبة البلاك جاك... التنسيق؟ نوع من المدونات التفاعلية؟ واو...أريد ذلك! يريد! 🙂
انظر تحت القطة حيث سننطلق في الحاوية جوبيتر لاب - الجيل التالي من واجهة المستخدم بدلاً من Jupyter Notebook القديم، وسنقوم أيضًا بتثبيت وحدات Python مثل نمباي, الباندا, ماتبلوتليب, IPyWidgets والذي سيسمح لك بالقيام بكل ما هو مذكور أعلاه وحفظه كله في ملف خاص - كمبيوتر محمول IPython.
ملاحة
- خطة الإقلاع المداري
- تركيب وتكوين النظام الأساسي
- تثبيت البرامج الأساسية وإعداد النظام
- تثبيت وتكوين JupyterLab
- مشاركة البيانات مع المضيف
- مرحبا بالعالم!
- توسيع قدرات بايثون
- وحدات الاختبار في JupyterLab
- ماذا بعد؟
خطة الإقلاع المداري ^
دعونا نحدد خطة عمل مختصرة لتسهيل تنفيذ المخطط أعلاه:
- لنقم بتثبيت وتشغيل الحاوية بناءً على مجموعة التوزيع ألبين لينكس. سوف نستخدم هذا التوزيع لأنه يهدف إلى البساطة وسوف نقوم بتثبيت البرامج الأكثر أهمية فيه فقط، ولا شيء غير ضروري.
- دعونا نضيف قرصًا افتراضيًا إضافيًا في الحاوية ونعطيه اسمًا -
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
— اتصل بعميل LXDexec
- طريقة عميل LXD التي تقوم بتشغيل أمر في الحاويةjupyterlab
- معرف الحاوية--
- مفتاح خاص يحدد عدم تفسير المفاتيح الإضافية كمفاتيح لـlxc
وتمرير بقية السلسلة كما هو الحال في الحاويةapk
- مدير حزمة توزيع Alpine Linuxadd
— طريقة مدير الحزم التي تقوم بتثبيت الحزم المحددة بعد الأمر
بعد ذلك، سوف نقوم بتعيين منطقة زمنية في النظام 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 ليست مسؤولة:
ومع ذلك، فإننا نعزل الكل جوبيتر لاب ووضعه في حاوية بحيث لا تتمكن ملحقات الطرف الثالث التي تتطلب 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 وقم بإنشاء أول كمبيوتر محمول خاص بك بالضغط على الزر الموجود في الصفحة كما هو موضح في الصورة أدناه:
ثم، في الحقل الموجود بالصفحة، أدخل كود Python الذي سيعرض الكود الكلاسيكي Hello World!
. عند الانتهاء من الإدخال، اضغط على CTRL+ENTER
أو زر "تشغيل" الموجود على شريط الأدوات بالأعلى ليقوم JupyterLab بذلك:
في هذه المرحلة، أصبح كل شيء تقريبًا جاهزًا للاستخدام، ولكن سيكون الأمر غير مثير للاهتمام إذا لم نقم بتثبيت وحدات Python الإضافية (التطبيقات الكاملة) التي يمكنها توسيع القدرات القياسية لـ Python بشكل كبير في جوبيتر لابلذلك دعونا ننتقل :)
PS الشيء المثير للاهتمام هو أن التنفيذ القديم كوكب المشتري تحت اسم الرمز مفكرة Jupyter لم يختفي وهو موجود بالتوازي مع جوبيتر لاب. للتبديل إلى الإصدار القديم، اتبع الرابط الذي يضيف اللاحقة في العنوان/tree
، ويتم الانتقال إلى الإصدار الجديد باستخدام اللاحقة /lab
، ولكن لا يلزم تحديده:
- دفتر جوبيتر - http://10.0.5.5:8888/tree
- مختبر جوبيتر - http://10.0.5.5:8888/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 ينشئ عنصر واجهة مستخدم على الصفحة يتفاعل بشكل تفاعلي مع الكود المصدري، وكذلك ماتبلوتليب يعرض نتيجة الكود على شكل صورة كرسم بياني للوظيفة:
أمثلة كثيرة IPyWidgets يمكنك العثور عليها في البرامج التعليمية هنا
ماذا بعد؟ ^
أحسنت لو بقيت ووصلت إلى نهاية المقال. لقد تعمدت عدم نشر نص جاهز في نهاية المقالة ليتم تثبيته جوبيتر لاب "بنقرة واحدة" لتشجيع العمال :) ولكن يمكنك القيام بذلك بنفسك، نظرًا لأنك تعرف بالفعل كيفية القيام بذلك، بعد أن جمعت الأوامر في نص Bash واحد :)
بامكانك ايضا:
- قم بتعيين اسم شبكة للحاوية بدلاً من عنوان IP عن طريق كتابته بخط بسيط
/etc/hosts
واكتب العنوان في المتصفح http://jupyter.local:8888 - تعرّف على حدود الموارد الخاصة بالحاوية، ولهذا اقرأ الفصل الموجود فيه قدرات LXD الأساسية أو احصل على مزيد من المعلومات على موقع مطور LXD.
- تغيير الموضوع:
وأكثر من ذلك بكثير يمكنك القيام به! هذا كل شئ. أتمنى لك النجاح!
تحديث: 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