اذهب إلى المحتوى

السؤال

نشر

عندي سؤالين كيف يكون تنزيل *نسختين* من اللغة نفسها هو الامر المناسب والذي لا يستحلك موارد اكثر ؟

اما سؤالي التاني فهو عن Docker هو الادة يلي بتتيح لي انني انقل صورة عن الاصدارات الى جهاز اخر لكي تعمل مع الشخص الذي نذل المشروع 

Recommended Posts

  • 0
نشر

بخصوص السؤال الأول . الموارد هنا المقصود بها هو تنزيل المكتبات من الإنترنت وحذف الملفات في كل مرة تريد تحديث أو تغير إصدار مكتبة . وأيضا لا يتم إستهلاك الموارد ما دام المشروع مغلق ولم يتم تشغيله إذا تنزيل نسختين من اللغة أو المكتبة لن يستهلك أى موارد ما دام المشروع لا يعمل .

وأيضا يجب الإنتباه إلى أنه ليس من الضروري أن يكون نسختين من اللغة ولكن السبب الرئيسي من البيئة الإفتراضية هو المكتبات . حيث كل مشروع له الإصدارات الخاصة بالمكتبات ولهذا إذا تم تنزيل مكتبات مختلفة سيحدث تضارب بينها . لنقل مثلا أن لدينا مكتبة إصدار 1x وتلك المكتبة تعتمد على مكتبة أخرى لها إصدار 1y  . ولكننا قمنا بتنزيل مشروع أخر يعتمد على إصدار 2y . إذا هنا المشروع الأول ستحدث به مشاكل لأنه تم تغير إصدار1y إلى 2y . وهكذا ستحدث مشاكل كثيرة لك في المشاريع . ولهذا فإن فصل البيئات يساعد في فصل كل مشروع بالمكتبات الخاصة به ولذلك تحديث أو تعديل أى مكتبة في بيئة إفتراضية ما لن يغير أى شئ في البيئات الأخرى.

بخصوص السؤال الثاني لنفهم أولا ما هو Docker : هو نظام حاويات (Containers) يستخدم لتشغيل التطبيقات في بيئات معزولة تماما ومحمولة 

فمثلا لو لدي مشروع يعمل لدي ولكن حينما أقوم بإرساله لك لا يعمل لديك وهذا بسبب إختلاف الحزم والبرامج وإعدادات الجهاز لديك مما يسبب مشاكل في تشغيل المشروع عند كل شخص .

ولهذا فإن Docker يعتمد على ما يسمى Docker Image (الصورة) وهو مثل "قالب جاهز" يحتوي على التطبيق (المشروع) مع مكتباته مع إعداداته الخاصة مثل نظام تشغيل Ubuntu  وإصدار معين من بايثون مع قاعدة بيانات MySQL.

وهنا لو لديك مشروع بايثون فبدلا من تنزيل بايثون مع قوراعد البيانات على كل جهاز تقوم فقط بكتابة Dockerfile لإنشاء صورة تحتوي على كل شيء جاهز وبمجرد فقط إرسال هذا الملف إلى أى شخص وتشغيله سيتم تحميل المشروع مع النظام مع جميع البرامج بجميع الإعدادات والإصدارات المناسبة تلقائيا دون الحاجةإلى تنزيل كل برنامج بشكل منفصل وإختلاف إصدار كل برنامج وتعارضات مع البرامج الموجودة في الجهاز وغيرها. فمثلا لو لديك مشروع بايثون 3.13 ولكن الشخص الأخر الذي أرسلت له المشروع لديه بايثون 3.10 مثلا هنا سيتوجب عليه حذف 3.10 وتنزيل 3.13 أو تنزيلهم معا والذي من الممكن أن يسبب مشاكل . ولكن من خلال docker يتم إنشاء حاوية كاملة لنظام كما لو أنك أنشأت نظام تشغيل جديد لديك ووضعت به البرامج .

إذا docker هو مخصص أكثر لبيئة العمل الكاملة من نظام تشغيل مع برامج مع مكتبات مع مشروع . أما البيئة الإفتراضية فهي مخصصة فقط لعزل المكتبات الخاصة بالمشروع.

  • 0
نشر

ليس كذلك، فلا يتم إنشاء نسخة كاملة من بايثون، بل نسخ الملفات الأساسية فقط الخاصة بمُفسر اللغة وهي الملفات التنفيذية python.exe و pip ومجلد lib/ الذي يحتوي على بنية لتثبيت الحزم الخاصة بالبيئة، وذلك في مجلد البيئة الإفتراضية.

ولكن المُفسر في البيئة الإفتراضية يٌشير إلى المُفسر الأصلي المُثبت على النظام أي يقوم بتشغيله هو وليس مُفسر مختلف، الإختلاف هو ضبط مسار البيئة الافتراضية لكي تكون نشطة وتثبيت الحزم بها بدلاً من تثبيتها في النطاق العام.

لذا المكتبات المُضمنة في اللغة كـ os، sys وغيرهم لا تُنسخ، بل تُستخدم من تثبيت بايثون الأصلي لتوفير المساحة.

أما Docker فهو أمر مختلف تمامًا، الترجمة الحرفية هي حاوية وبالتبعية الأمر أشبه بحجرة مغلقة معزولة تمامًا وتضع بداخلها كل ما تريد لتشغيل المشروع بغض النظر عن نوع نظام التشغيل، طالما Docker مثبت على النظام تستطيع تشغيل الحاوية والتي بها المشروع كما هو تمامًا على جميع الأجهزة ولن يختلف شيء من جهاز لآخر.

وذلك له فوائد كثيرة ستجد تفصيلها هنا:

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...