كيفية إدارة تبعيات بايثون باستخدام البيئات الافتراضية

دقائق القراءة: 6

مقدمة: لماذا تُعد إدارة التبعيات في بايثون أمراً أساسياً؟

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

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

إدارة تبعيات مشاريع بايثون باستخدام البيئات الافتراضية بشكل احترافي

ما المقصود بالبيئات الافتراضية في Python؟

البيئة الافتراضية هي مجلد معزول يحتوي على نسخة تنفيذية من Python بالإضافة إلى الحزم التي يطلبها مشروعك فقط. عند العمل داخل هذه البيئة، يتم تثبيت المكتبات فيها بدلاً من تثبيتها على مستوى النظام بالكامل.

هذا الأسلوب يمنحك مرونة عالية، خصوصاً إذا كنت تعمل على أكثر من مشروع، ولكل مشروع إصدارات مختلفة من نفس المكتبة.

لماذا نحتاج إلى البيئات الافتراضية في Python؟

يمكنك استخدام pip لتثبيت الحزم البرمجية بسهولة، لكن المشكلة تبدأ عندما يتم التثبيت في النطاق العام للنظام. عند تنفيذ أمر مثل pip install <package-name>، يتم تثبيت الحزمة وتبعياتها ضمن المسار العام الخاص بإصدار Python المستخدم.

يمكنك معرفة المسارات التي يعتمد عليها المفسر عبر الأمر التالي:

python3.7 -c "import sys; print('\n'.join(sys.path))
/usr/lib/python27.zip
/usr/lib/python2.7
/usr/lib/python2.7/lib-dynload
/usr/lib/python2.7/site-packages

وعند استخدام pip3 install <package-name>، سيتم التثبيت غالباً ضمن مسار مختلف مرتبط بإصدار Python 3. ولجعل الأمر أكثر دقة، يمكن استخدام الصيغة التالية:

python2.7 -m pip install <package-name>

لكن حتى مع هذه الطريقة، تبقى الحزم مثبتة على مستوى النظام، وهذا قد يسبب عدة مشاكل عملية.

أبرز المشاكل عند التثبيت على مستوى النظام

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

لذلك، يلجأ مطورو Python إلى البيئات الافتراضية باعتبارها حلاً نظيفاً وفعالاً لعزل التبعيات وتنظيمها.

كيف تعمل البيئات الافتراضية؟

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

هذا العزل مهم جداً في المشاريع الاحترافية، لأنه يجعل التطوير، والاختبار، والنشر أكثر استقراراً وقابلية للتكرار.

إنشاء بيئة افتراضية في Python

الأداة القياسية المستخدمة في Python 3.3+ لإنشاء البيئات الافتراضية هي venv، وهي مدمجة ضمن المكتبة القياسية للغة. أما في Python 2، فكان المطورون يعتمدون غالباً على أداة virtualenv التي تحتاج إلى تثبيت يدوي.

إذا كنت تستخدم Python 2، يمكنك تثبيت الأداة عبر الأمر التالي:

python2 -m pip install virtualenv

لكن في هذا الدليل سنركز على venv وبيئة Python 3، لأنها أصبحت الخيار القياسي والأكثر شيوعاً.

1) إنشاء مجلد المشروع

ابدأ أولاً بإنشاء مجلد جديد للمشروع ثم انتقل إليه:

mkdir my-python-project && cd my-python-project

2) إنشاء البيئة الافتراضية

بعد الدخول إلى مجلد المشروع، أنشئ البيئة الافتراضية بالأمر التالي:

python3 -m venv virtualenv

يمكنك تغيير اسم المجلد virtualenv إلى أي اسم آخر مثل env أو .venv بحسب أسلوبك في التنظيم.

بعد تنفيذ الأمر، سيُنشأ مجلد جديد يحتوي عادةً على ملفات ومجلدات مثل bin وlib وinclude بالإضافة إلى ملفات إعدادات البيئة. هذه المكونات تضمن تشغيل الشيفرة البرمجية ضمن هذا السياق المعزول.

3) تفعيل البيئة الافتراضية

لكي تبدأ العمل داخل البيئة، يجب تفعيلها أولاً. عند التفعيل، سيتغير شكل سطر الأوامر ليعكس اسم البيئة النشطة:

$ source env/bin/activate
(virtualenv) $

ظهور اسم البيئة قبل مؤشر الأوامر يعني أن البيئة الافتراضية أصبحت نشطة، وأن أي عملية تثبيت أو تنفيذ ستتم ضمنها.

في هذه الحالة:

  • لن تكون حزم النظام العامة متاحة تلقائياً داخل البيئة، إلا إذا تم إعدادها بشكل خاص.
  • أي حزمة تثبتها داخل البيئة لن تكون متاحة خارجها.
  • بشكل افتراضي، يتم توفير pip وsetuptools فقط داخل البيئة الجديدة.

تقنياً، عند التفعيل يتم تعديل متغير المسار PATH بحيث يستخدم النظام النسخة المحلية من Python وpip الموجودة داخل البيئة بدلاً من النسخ العامة.

4) الخروج من البيئة الافتراضية

عندما تنتهي من العمل وتريد العودة إلى البيئة العامة للنظام، استخدم الأمر التالي:

(virtualenv) $ deactivate
$

كيفية إدارة التبعيات بين البيئات المختلفة

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

الحل الأفضل هو إنشاء ملف requirements.txt داخل المجلد الجذري للمشروع، ليضم قائمة الحزم المطلوبة مع أرقام إصداراتها.

استخراج الحزم المثبتة

إذا قمت مثلاً بتثبيت إطار العمل Flask داخل البيئة الافتراضية، فيمكنك عرض الحزم المثبتة عبر الأمر pip freeze:

(virtualenv) $ pip freeze
Flask==1.1.2

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

حفظ التبعيات في ملف requirements.txt

يمكنك تصدير هذه القائمة إلى ملف باستخدام الأمر التالي:

(virtualenv) $ pip freeze > requirements.txt

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

إعادة تثبيت التبعيات على جهاز آخر

عندما يحصل شخص آخر على نسخة من المشروع، فكل ما يحتاج إليه هو إنشاء بيئة افتراضية جديدة ثم تثبيت الحزم من ملف requirements.txt:

$ cd copied-project/
$ python3 -m venv virtualenv/
$ python3 -m pip install -r requirements.txt

بهذه الطريقة، يحصل على نفس الحزم تقريباً التي استخدمتها أثناء التطوير، ما يقلل احتمالات ظهور أخطاء ناتجة عن اختلاف البيئة.

أفضل الممارسات عند استخدام البيئات الافتراضية

  • أنشئ بيئة افتراضية مستقلة لكل مشروع بدلاً من مشاركة نفس البيئة بين عدة مشاريع.
  • أضف مجلد البيئة الافتراضية إلى ملف .gitignore حتى لا يتم رفعه إلى Git.
  • احرص على تحديث ملف requirements.txt كلما أضفت تبعية جديدة.
  • استخدم أسماء واضحة للبيئات مثل env أو .venv لتسهيل معرفة الغرض منها.
  • اختبر مشروعك داخل بيئة نظيفة كل فترة للتأكد من أن ملف requirements.txt يعبّر فعلاً عن جميع التبعيات اللازمة.

متى يكون استخدام البيئات الافتراضية ضرورياً؟

في الواقع، يُنصح باستخدام البيئات الافتراضية في معظم مشاريع Python، سواء كانت صغيرة أو كبيرة. لكنها تصبح ضرورية جداً في الحالات التالية:

  • عند تطوير تطبيقات ويب باستخدام أطر مثل Flask أو Django.
  • عند العمل ضمن فريق يحتاج إلى توحيد بيئة التطوير.
  • عند إدارة عدة مشاريع تستخدم إصدارات مختلفة من نفس المكتبات.
  • عند تجربة مكتبات جديدة دون المخاطرة بإفساد بيئة النظام الأساسية.

الخلاصة التقنية

تُعد البيئات الافتراضية في Python من أهم الممارسات التي تضمن استقرار المشروع وسهولة صيانته على المدى الطويل. فهي لا تقتصر على عزل الحزم فقط، بل تساعد أيضاً في توثيق التبعيات، وتسهيل نقل المشروع بين الأجهزة، وتقليل احتمالات التعارض بين المكتبات والإصدارات. إذا كنت تطوّر مشاريع بايثون بشكل جاد، فإن اعتماد venv مع ملف requirements.txt ليس مجرد خيار جيد، بل خطوة أساسية نحو بناء بيئة تطوير احترافية ومنظمة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *