عند تعلم بايثون، يركز العديد من المبتدئين على اللغة ومكتباتها فقط، متجاهلين البيئات الافتراضية تمامًا. نتيجةً لذلك، قد تُصبح إدارة مشاريع بايثون مُرهقة: قد تتعارض إصدارات التبعيات المُثبّتة لمشاريع مختلفة، مما يُؤدي إلى مشاكل في التوافق.
حتى عندما كنتُ أدرس بايثون، لم يُشدّد أحد على أهمية البيئات الافتراضية، وهو أمرٌ أجده الآن غريبًا جدًا. فهي أداةٌ فعّالةٌ للغاية لعزل المشاريع المختلفة عن بعضها البعض.
في هذه المقالة، سأشرح كيفية عمل البيئات الافتراضية، وأقدم العديد من الأمثلة وأشارك الأوامر المفيدة لإدارتها.
المشكلة
تخيل أن لديك مشروعي بايثون على حاسوبك المحمول، كلٌّ منهما موجود في مجلد مختلف. تدرك أنك بحاجة إلى تثبيت أحدث إصدار من المكتبة “أ” للمشروع الأول. لاحقًا، تنتقل إلى المشروع الثاني وتحاول تثبيت المكتبة “ب”.
إليك المشكلة: تعتمد المكتبة B على المكتبة A، ولكنها تتطلب إصدارًا مختلفًا عن الإصدار الذي قمت بتثبيته سابقًا.

بما أنك لم تستخدم أي أداة لإدارة التبعيات، فجميع التبعيات مُثبّتة عالميًا على جهاز الكمبيوتر الخاص بك. بسبب عدم توافق إصدارات المكتبة “أ”، ستواجه خطأً عند محاولة تثبيت المكتبة “ب”.
الحل
لتجنب هذه المشاكل، تُستخدم بيئات افتراضية. الفكرة هي تخصيص مساحة تخزين منفصلة لكل مشروع بايثون. تحتوي كل مساحة تخزين على جميع التبعيات المُنزّلة خارجيًا لمشروع محدد بشكل منفصل.
وبشكل أكثر تحديدًا، إذا نزّلنا المكتبة (أ) نفسها لمشروعين ضمن بيئتيهما الافتراضيتين، فسيتم تنزيلها مرتين – مرة لكل بيئة. علاوة على ذلك، قد تختلف إصدارات المكتبة بين البيئات لأن كل بيئة معزولة تمامًا ولا تتفاعل مع البيئات الأخرى.
الآن بعد أن أصبح الدافع وراء استخدام البيئات الافتراضية واضحًا، دعنا نستكشف كيفية إنشائها في Python.
البيئات الافتراضية في بايثون
يُنصح بإنشاء بيئة افتراضية في المجلد الجذر للمشروع. يتم إنشاء البيئة باستخدام الأمر التالي في الطرفية:
python -m venv <environment_name>
حسب الاتفاقية، يتم تسمية عادةً باسم venv، وبالتالي يصبح الأمر:
python -m venv venv
نتيجةً لذلك، يُنشئ هذا الأمر مجلدًا يُسمى venv، والذي يحتوي على البيئة الافتراضية نفسها. يُمكنك أيضًا الدخول إلى هذا المجلد، ولكن في أغلب الأحيان، لا يكون ذلك مفيدًا جدًا، إذ يحتوي مجلد venv بشكل أساسي على نصوص برمجية للنظام غير مُخصصة للاستخدام المباشر.
لتنشيط البيئة الافتراضية، استخدم الأمر التالي:
source venv/bin/activate
بمجرد تفعيل البيئة، يُمكننا تثبيت تبعيات المشروع. طالما أن venv مُفعّل، فإن أي تبعيات مُثبّتة ستكون تابعة لتلك البيئة فقط.
لإلغاء تنشيط البيئة الافتراضية، اكتب:
deactivate
بعد إلغاء تنشيط البيئة، يعود الجهاز إلى حالته الطبيعية. على سبيل المثال، يمكنك الانتقال إلى مشروع آخر وتنشيط بيئته هناك.
إدارة التبعية
تثبيت المكتبات
قبل تثبيت أي تبعيات، يُنصح بتفعيل بيئة افتراضية لضمان انتماء المكتبات المُثبّتة إلى مشروع واحد. هذا يُساعد على تجنب تعارضات الإصدارات العالمية.
الأمر الأكثر استخدامًا لإدارة التبعيات هو pip. مقارنةً بالبدائل الأخرى، يتميز pip بسهولة الاستخدام
.لتثبيت المكتبة، اكتب:
pip install <library_name>
في الأمثلة أدناه، بدلاً من <library_name>، سأكتب pandas (مكتبة تحليل البيانات الأكثر استخدامًا).
على سبيل المثال، إذا أردنا تنزيل الإصدار الأحدث من pandas، كان ينبغي علينا كتابة:
pip install pandas
في بعض السيناريوهات، قد نحتاج إلى تثبيت إصدار معين من المكتبة. يوفر pip صيغة بسيطة للقيام بذلك:
pip install pandas==2.1.4 # install pandas of version 2.1.4
pip install pandas>=2.1.4 # install pandas of version 2.1.4 or higher
pip install pandas<2.1.4 # install pandas of version less than 2.1.4
pip install pandas>=2.1.2,<2.2.4 # installs the latest version available between 2.1.2 and 2.2.4
عرض تفاصيل التبعية
إذا كنت مهتمًا بتبعية معينة قمت بتثبيتها، فإن إحدى الطرق البسيطة للحصول على مزيد من المعلومات عنها هي استخدام الأمر pip show:
pip show pandas
على سبيل المثال، سيقوم الأمر الموجود في المثال بإخراج المعلومات التالية:

حذف التبعية
لإزالة التبعية من بيئة افتراضية، استخدم الأمر التالي:
pip uninstall pandas
بعد تنفيذ هذا الأمر، سيتم حذف جميع الملفات المتعلقة بالمكتبة المحددة، مما يوفر مساحة على القرص. مع ذلك، إذا شغّلت برنامج بايثون يستورد هذه المكتبة مرة أخرى، فستواجه خطأ استيراد.
ملف بالمتطلبات
من الممارسات الشائعة عند إدارة التبعيات إنشاء ملف requirements.txt يحتوي على قائمة بجميع التبعيات المُنزّلة في المشروع مع إصداراتها. إليك مثال على شكله:
fastapi==0.115.5
pydantic==2.10.1
PyYAML==6.0.2
requests==2.32.3
scikit-learn==1.5.2
scipy==1.14.1
seaborn==0.13.2
streamlit==1.40.2
torch==2.5.1
torchvision==0.20.1
tornado==6.4.2
tqdm==4.67.1
urllib3==2.2.3
uvicorn==0.32.1
yolo==0.3.2
من الناحية المثالية، في كل مرة تستخدم فيها أمر تثبيت pip، يجب عليك إضافة سطر مماثل إلى ملف requirements.txt لتتبع جميع المكتبات المستخدمة في المشروع.
مع ذلك، إذا نسيتَ القيام بذلك، فلا يزال هناك بديل: يُخرِج أمر pip freeze جميع التبعيات المُثبَّتة في المشروع. مع ذلك، قد يكون أمر pip freeze مُطوّلاً بعض الشيء، إذ غالبًا ما يتضمن العديد من أسماء المكتبات الأخرى التي تُعدّ تبعيات للمكتبات التي تستخدمها في المشروع.
pip freeze > requirements.txt
عند استنساخ مشروع بايثون، يُتوقع وجود ملف requirements.txt مُسبقًا في مستودع Git. لتثبيت جميع التبعيات المُدرجة في هذا الملف، استخدم أمر pip install مع علامة -r متبوعةً باسم ملف المتطلبات.
pip install -r requirements.txt
على العكس من ذلك، عندما تعمل على مشروع Python، يجب عليك إنشاء ملف requirements.txt حتى يتمكن المتعاونون الآخرون من تثبيت التبعيات الضرورية بسهولة.
.gitignore
عند العمل مع أنظمة التحكم في الإصدارات، لا ينبغي أبدًا نقل البيئات الافتراضية إلى Git! بل يجب ذكرها في ملف .gitignore.
تميل البيئات الافتراضية إلى أن تكون كبيرة جدًا، وإذا كان هناك ملف requirements.txt موجود، فلا ينبغي أن تكون هناك مشكلة في تنزيل جميع التبعيات الضرورية.
في هذه المقالة، تناولنا مفهوم البيئات الافتراضية بالغ الأهمية. من خلال عزل التبعيات المُنزّلة لمشاريع مختلفة، تُسهّل هذه البيئات إدارة مشاريع بايثون متعددة.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.