بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
بعد نشر مقالنا الأخير الأسبوع الماضي المعنون (استعمال ملف env. لمتغيرات البيئة في بايثون)، أرتأيت أن أكتب مقال اليوم لتعلقه بالمقال السابق، شارحًا مكتبةً تنشئ بيئة وهمية.
وإنشاء بيئة وهمية أمر في غاية الأهمية وستحتاجها، لكن قبلها أتعرف ما البيئة؟
هي المكان الذي تشغل برنامجك فيه، أينظام التشغيل الذي يشغل البرنامج الآن، وهو نفسه الذي يحوي على لغة بايثون مثبتة وجاهزة للاستعمال، مع المكاتب المطلوبة والمضمنة مع اللغة، وأي مكاتب أخرى ثبتها أنت بنفسك.
ولِمَ هي مهمة يا مبعسس؟
أما تترك الألغاز وتشرح للرعية!
ميزات البيئة الوهمية
مجتمع بايثون ينصحون ويحثون على استعمال بيئة وهمية لكافة مشاريعك، وهذا ليس اعتباطًا، لأسباب عدة، نذكر منها:
١. لغة بايثون سيئة في إدارة التبعيات dependencies (هذه التبعيات هي المكاتب التي يطلبها برنامجك، وتسمى تبعيات لأنها تتبعه)، فلو ثبت مكتبة باستعمال مدير الحزم pip فإنه سيثبتها في مجلد site-packegs الذي هو في المكان المثبت فيه بايثون، وكل المكاتب في مكان واحد، أتعلم سوء هذا؟
اقرأ ما يلي!
٢. تجنب تضارب الحزم: هب أن برنامجا لك يستعمل إصدارا معينا من المكتبة الفلانية، ولك برنامج آخر يستعمل نفس المكتبة لكن بإصدار آخر، ما أنت فاعل؟
ألا تتذكر أن بايثون سيئة في إدارة التبعيات وتثبت المكاتب في مكان واحد؟
إن ثبتت إصدارين مختلفين لمكتبة ما فإن الإصدار المثبت يحل محل الإصدار السابق، وهنا أتت فائدة البيئة الوهمية التي تمكنك من تثبيت إصدار معين للبيئة الوهمية، إصدار منعزل على الإصدار المستعمل في نظامك.
٣. سهولة مشاركة بيئة العمل، فتمكن غيرك من العمل على مشروعك بنفس المكاتب التي عملت عليها، فلا يثبت مكاتب زائدة ولا تنقصها أيضًا، وتكون بيئة معزولة عن النظام الأصلي.
هيا لننشئ بيئة وهمية لمشروعنا!
إنشاء بيئة وهمية
سننشئ بيئة وهمية باستعمال مكتبة اسمها virtualenv، لأنها تمكننا من إنشاء بيئات وهمية، وأمر تثبيتها:
pip install virtualenv
الأداة المساعدة لإنشاء البيئة الوهمية قد ثُبِتَت. سننشئ مجلدًا خاصًا بالمشروع الذي نود الشروع فيه، وثم لما ندخل إليه، سنكتب الأمر التالي لإنشاء بيئة وهمية باسم مبعسس bassye:
python3 -m venv bassye
ثم سترى في المجلد أن مجلدا قد ظهر، باسم bassye، وهو اسم البيئة الوهمية.
لقد أنشأنا البيئة الوهمية، لكنها لم تتفعل بعد!
إن لم تفعلها وثبت مكتبة فإنها لن تكون معزولة، ولن تثبت في البيئة الوهمية، لذا عليك تفعيلها، بالأمر الآتي إن كنت تستعمل لينُكس أو ماك:
source bassye/bin/activate
أما ويندوز:
bassye\Scripts\activate
وقبل أن تشغله تحقق أنك في نفس المجلد. سترى في المحث prompt أن اسم البيئة الوهمية قد ظهر، وهكذا قد عملت!
تهانينا، الآن ثبت أي مكتبة تريدها وستكون في البيئة الوهمية، معزولة عن باقي مكاتب النظام.
ما لم تغلق المِطراف terminal فإن الجلسة تعمل.
للخروج من الجلسة نفذ أمر:
deactivate
وسترى اسم البيئة الوهمية قد اختفى، وهذا دليل توقفها.
إن كان هذا كل ما يهمك فقد انتيهنا، والمقال إلى هنا ينتهي عندك، لكن إن أردت التعمق فواصل معي!
بنية المجلد
لما تنشئ البيئة الوهمية فإنك ستجد ثلاثة مجلدات:
١. مجلد الملفات الثنائية bin (على ويندوز Scripts)
٢. مجلد الملفات الرأسية include (على ويندوز Include)، ويحوي الملفات الرأسيات header files.
٣. مجلد lib/pythonX.Y/site-packages، وx وy هو إصدار بايثون المستعمل في إنشاء البيئة الوهمية (على ويندوز Lib/site-packages)، ويحوي المكاتب الخارجية التي تثبتها
٤. مجلد lib64 الذي هو رابط يشير إلى lib، إن كنت تستعمل نظام بمعمارية ٦٢، وهو على الأجهزة التي تتبع معيار POSIX، وهو ليس على ماك mac
وأيضًا فيه ملف الإعدادات pybassye.cfg، ويحوي:
١. مجلد المنزل home: فيه الملفات الثنائية القابلة للتنفيذ executable.
٢. مجلد include-system-packages: يأخذ قيمتين، نعم أم لا true or false، وضع إحدى القيمتين يحدد هل يضمن مجلد site-packages العام الذي يستعمله النظام كله أم لا.
٣. الإصدار version: إصدار بايثون المستعمل
٤. الأمر command: الأمر المتسعمل لإعادة إنشاء البيئة الوهمية.
على نظامي يحوي الملف على هذه المعلومات:
home = /home/narsus/.narsus/opt/[email protected]/bin
include-system-site-packages = false
version = 3.11.2
executable = /home/narsus/.narsus/Cellar/[email protected]/3.11.2_1/bin/python3.11
command = /home/narsus/.narsus/opt/[email protected]/bin/python3.11 -m venv /tmp/.venv
كيف تستعمل بايثون البيئة الوهمية
لما تشغل البرنامج فإن بايثون تستعمل الوظيفة site.main()، فإن هذه الوظيفة تستدعي site.venv() التي تولد إعدادات ملف بايثون لاستعمال البيئة الوهمية، خاصة وحدة site التي:
١. تبحث عن pybassye.cfg
٢. ثم تبحث عن include-system-site-packages في pybassye.cfg لترى هل يضمنه أم لا
٣. ثم تحدد قيمة المتغير sys._home إذا وجِد متغير home في ملف pybassye.cfg.
هذا كل شيء يا صاحبي، آلية سهلة مقارنة بما تفعله!
وأمر يجب قوله هنا أن تفعيل البيئة الوهمية أمر اختياري، فالأمر لا يعيق الوحدة site المسؤولة عن تعامل مع إعداد وتكويم مكاتب بايثون وما يخصها في بيئة بايثون، لأن وحدة site تعتمد على الرابط link الذي يشير إلى الملف القابل للتنفيذ الذي داخل البيئة الافتراضية.
فهذا الرابط يسمح للوحدة بتحديد وحل جميع التبعيات اللازمة التي يتطلبها المشروع، وكل ما يفعله ملف التنشيط هو:
١. يضع مجلد /bin في مقدمة متغيرات البيئة التي يبحث عنها البرنامج لما يبدأ العمل.
٢. يضبط متغير VIRTUAL_ENV على المجلد الذي يحوي البيئة الافتراضية.
٣. يُعلم المظرف shell أن متغير البيئة قد تغير.
٤. أمر deactivate يلغي كل الخطوات السابقة.
ليس أمرًا لازمًا تفعيل البيئة الوهمية يا مبعسس، حقًا؟!
نعم، لكن يجب عليك تحديد المسار كاملا لمترجم بايثون الفوري interpreter الجديد الذي في المجلدات الجديدة، وهذا أمر متعب أن تكتب المسار الكامل كل مرة، لذا فعلها وينتهي الأمر!
الخاتمة
وها أنا أخط بقلمي الخطوط الأخيرة لهذا المقال الشائق، وأرجو إني قد وفِّقت في الشرح.
وفي نهاية الأمر لا يسعني سوى أن أشكرك على حسن قراءتك لهذا المقال، وأني لبشر أصيب وأخطِئ، فإن وفِّقت في طرح الموضوع فمن اللّٰه عز وجل وإن أخفقت فمن نفسي والشيطان.
أرجو منك تقييم كفاءة المعلومات من أجل تزويدي بالملاحظات والنقد البناء في خانة التعليقات أو عبر حساب الموقع، والسلام عليكم ورحمة اللّٰه تعالى وبركاته.