بيئات بايثون الافتراضية

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

يُعدّ العمل مع البيئات الافتراضية ممارسة شائعة وفعّالة في تطوير بايثون. سيساعدك فهم كيفية عملها، وسبب حاجتك إليها، وما يمكنك فعله بها على إتقان سير عمل برمجة بايثون.

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

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

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

ملاحظة: هناك أدوات خارجية رائعة أخرى لإنشاء بيئات افتراضية، مثل conda وvirtualenv، والتي ستتعرف عليها أكثر لاحقًا في هذا البرنامج التعليمي. يمكن لأيٍّ من هاتين الأداتين مساعدتك في إعداد بيئة افتراضية، بل وأكثر من ذلك.

للاستخدام الأساسي، يُعد venv خيارًا ممتازًا لأنه يأتي مُضمنًا مع تثبيت بايثون. مع وضع ذلك في الاعتبار، أنت جاهز لإنشاء بيئتك الافتراضية الأولى.

قم بإنشائه

في أي وقت تعمل فيه على مشروع بايثون يستخدم التبعيات الخارجية التي تقوم بتثبيتها باستخدام pip، من الأفضل أن تقوم أولاً بإنشاء بيئة افتراضية:

PS> py -m venv venv\

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

يمكنك تجاوز المشغل وتشغيل ملف بايثون القابل للتنفيذ مباشرةً باستخدام أمر python، ولكن إذا لم تقم بإعداد متغيري PATH وPATHEXT، فقد تحتاج إلى توفير المسار الكامل:

PS> C:\Users\Name\AppData\Local\Programs\Python\Python312\python -m venv venv\

يفترض مسار النظام الموضح أعلاه أنك ثبّت بايثون 3.12 باستخدام مُثبّت ويندوز المُتاح في صفحة تنزيلات بايثون. قد يختلف مسار ملف بايثون التنفيذي على نظامك. باستخدام PowerShell، يمكنك العثور على المسار باستخدام أمر python where.exe.

يُنشئ هذا الأمر بيئة افتراضية جديدة باسم venv باستخدام وحدة venv المُدمجة في بايثون. يُحدد venv الأول الذي تستخدمه في الأمر الوحدة، بينما يُحدد venv/ الثاني اسم بيئتك الافتراضية. يُمكنك تسميتها بشكل مختلف، ولكن تسميتها venv ممارسة جيدة لضمان الاتساق.

تفعيله

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

PS> venv\Scripts\activate
(venv) PS>

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

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

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

بمجرد رؤية اسم بيئتك الافتراضية في موجه الأوامر – في هذه الحالة (venv) – ستعلم أن بيئتك الافتراضية نشطة. الآن، أنت جاهز لتثبيت حزمك الخارجية!

تثبيت الحزم داخل البيئة الإفتراضية

بعد إنشاء بيئتك الافتراضية وتنشيطها، يمكنك تثبيت أي تبعيات خارجية تحتاجها لمشروعك:

(venv) PS> python -m pip install <package-name>

هذا الأمر هو الأمر الافتراضي الذي يجب استخدامه لتثبيت حزم بايثون الخارجية باستخدام pip. لأنك أنشأتَ البيئة الافتراضية وفعّلتَها أولًا، فسيُثبّت pip الحزم في مكان معزول.

يمكنك الآن تثبيت حزمك في بيئتك الافتراضية. للوصول إلى هذه المرحلة، أنشأتَ بيئة افتراضية باسم venv، ثم فعّلتها في جلسة shell الحالية.

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

إلغاء تنشيط البيئة الإفتراضية

بمجرد الانتهاء من العمل مع هذه البيئة الافتراضية، يمكنك إلغاء تنشيطها:

(venv) PS> deactivate
PS>

بعد تنفيذ أمر deactivate ، يعود موجه الأوامر إلى وضعه الطبيعي. هذا التغيير يعني أنك خرجت من بيئتك الافتراضية. إذا تفاعلت مع بايثون أو pip الآن، فستتفاعل مع بيئة بايثون المُهيأة عالميًا.

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

قبل تثبيت أي حزمة، ابحث عن اسم بيئتك الافتراضية بين قوسين قبل موجه الأوامر. في المثال أعلاه، اسم البيئة هو venv.

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

في هذه المرحلة، قمت بتغطية أساسيات العمل مع البيئات الافتراضية الخاصة بـبايثون باستخدام وحدة venv.

كيف تقوم تفعيل Venv في IDE الخاص بك؟

يُمكنك العمل مع البيئات الافتراضية مباشرةً من بيئة التطوير المتكاملة (IDE) لتبسيط عملية التطوير. تُوفر بيئات التطوير المتكاملة الشهيرة، مثل Visual Studio Code (VS Code) وPyCharm، دعمًا مدمجًا لإدارة بيئات بايثون الافتراضية، مما يسمح لك بإنشائها وتفعيلها وإدارتها دون مغادرة المحرر.

إنشاء بيئة افتراضية وتنشيطها في VS Code

Visual Studio Code هو محرر أكواد خفيف الوزن وقوي يدعم تطوير بايثون. لإنشاء بيئة بايثون وتفعيلها في Visual Studio Code، اتبع الخطوات التالية:

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

قد يكتشف VS Code تلقائيًا البيئة الافتراضية النشطة. للتأكد من استخدامها لجميع ملفات المشروع، افتح لوحة الأوامر بالضغط على Ctrl+Shift+P على نظامي Windows وLinux، واكتب Python: اختر Interpreter حتى يظهر كخيار.

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

ستعرف أنه المترجم الصحيح إذا كان مسار المترجم يظهر بالشكل .\venv\Scripts\python على نظام Windows. اضغط على Enter لتحديد المترجم ضمن بيئتك الافتراضية التي أنشأتها حديثًا.

بهذه الخطوات، تكون قد أنشأتَ بيئة افتراضية في VS Code وفعّلتها بنجاح. ستلاحظ أيضًا التغييرات في شريط حالة VS Code، الذي يعرض اسم المترجم النشط.

إنشاء بيئة افتراضية وتنشيطها في PyCharm

PyCharm، بيئة تطوير متكاملة رائدة أخرى لبايثون، تُقدم دعمًا قويًا لإدارة البيئات الافتراضية ضمن مشاريع بايثون. في بعض السيناريوهات، يتولى PyCharm إنشاء البيئات الافتراضية وتنشيطها نيابةً عنك.

إذا فتحت مشروع PyCharm موجودًا يحتوي بالفعل على بيئة افتراضية في مجلد المشروع، فسوف يتعرف عليه PyCharm تلقائيًا ويقوم بتنشيطه لك:

إذا قمت بإنشاء مشروع PyCharm جديد، فسوف يطالبك بإنشاء بيئة افتراضية عن طريق تحديد خيار الأدوات ومترجم Python الأساسي:

بعد النقر فوق “إنشاء”، يقوم PyCharm بإعداد البيئة الافتراضية بالاسم الافتراضي .venv ويقوم بتنشيطها لك:

كلا الخيارين واضحان ولن تحتاج إلى بذل الكثير من الجهد حتى يقدم لك PyCharm بيئة عمل افتراضية.

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

للبدء، افتح مشروعك في PyCharm وحدد مجلد المشروع الحالي لديك.

بعد ذلك، افتح إعدادات مشروعك بالانتقال إلى ملف ثم الإعدادات على نظام التشغيل Windows—أو PyCharm —ومن الشريط الجانبي الأيسر، حدد المشروع: اسم مشروعك → مُفسّر بايثون:

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

يُنشئ PyCharm بيئة افتراضية جديدة في مجلد مشروعك ويُفعّلها، ويُطلق عليها افتراضيًا اسم .venv. انقر على “موافق” مرة أخرى للخروج من إعدادات مشروعك. يمكنك التأكد من إعداد مشروعك لاستخدام بيئتك الافتراضية الجديدة، والتي تُسمى .venv، بتمرير مؤشر الماوس فوق اسم مُفسّر بايثون في الزاوية اليمنى السفلية.

سيعرض لك مسار مُفسّر بايثون المُضمّن في مجلد البيئة الافتراضية. ستستخدم أي نصوص برمجية تُشغّلها عبر PyCharm البيئة الافتراضية المُهيأة دون الحاجة إلى تفعيلها يدويًا.

الآن تعرف كيفية إنشاء بيئات افتراضية وتفعيلها يدويًا، وكيفية إعدادها في بيئتي تطوير بايثون شائعتين. إذا كان هذا كل ما تحتاجه، فحظًا سعيدًا في مواصلة الإبداع!

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

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

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

الإجابة المختصرة هي أن بايثون ليست بارعة في إدارة التبعيات. إذا لم تكن دقيقًا، فسيضع pip جميع الحزم الخارجية التي تُثبّتها في مجلد يُسمى site-packages/ في تثبيت بايثون الأساسي.

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

تجنب تلوث النظام

يأتي Linux وmacOS مثبتًا مسبقًا بإصدار بايثون الذي يستخدمه نظام التشغيل للمهام الداخلية.

إذا ثبّتتَ حزمًا على بايثون العالمي لنظام التشغيل لديك، فستختلط هذه الحزم مع الحزم المرتبطة بالنظام. قد يُؤدّي هذا الاختلاط إلى آثار جانبية غير متوقعة على مهام أساسية لسير عمل نظام التشغيل بشكل طبيعي.

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

تجنب تعارضات التبعية

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

لفهم سبب أهمية ذلك بشكل أفضل، تخيل أنك تقوم ببناء مواقع ويب Django لعميلين مختلفين:

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

إذا قمت بتثبيت Django عالميًا، فلن تتمكن إلا من تثبيت إصدار واحد:

PS> py -m pip install django==2.2.26
PS> py -m pip list
Package  Version
-------- -------
Django   2.2.26
pip      24.2
pytz     2024.1
sqlparse 0.5.1
 
PS> py -m pip install django==5.1
PS> py -m pip list
Package  Version
-------- -------
asgiref  3.8.1
Django   5.1
pip      24.2
pytz     2024.1
sqlparse 0.5.1
tzdata   2024.1

إذا ثبّتت نسختين مختلفتين من الحزمة نفسها في بيئة بايثون العالمية، فإن التثبيت الثاني يحل محل الأول. وللسبب نفسه، لن ينجح وجود بيئة افتراضية واحدة لكلا العميلين. لا يمكنك استخدام نسختين مختلفتين من الحزمة نفسها في بيئة بايثون واحدة.

يبدو أنك لن تتمكن من العمل على أحد المشروعين بهذا الإعداد! مع ذلك، إذا أنشأت بيئة افتراضية لكل مشروع من مشاريع عملائك، فيمكنك تثبيت إصدار مختلف من Django في كل منها:

PS> py -m venv client-old\
PS> client-old\Scripts\activate
(client-old) PS> python -m pip install django==2.2.26
(client-old) PS> python -m pip list
Package  Version
-------- -------
Django   2.2.26
pip      24.2
pytz     2024.1
sqlparse 0.5.1
(client-old) PS> deactivate
 
PS> py -m venv client-new\
PS> client-new\Scripts\activate
(client-new) PS> python -m pip install django==5.1
(client-new) PS> python -m pip list
Package  Version
-------- -------
asgiref  3.8.1
Django   5.1
pip      24.2
sqlparse 0.5.1
tzdata   2024.1
(client-new) PS> deactivate

إذا فعّلتَ الآن أيًّا من البيئتين الافتراضيتين، فستلاحظ أنهما لا تزالان تحتفظان بإصدار Django الخاص بهما. لكلٍّ من البيئتين تبعيات مختلفة، وكلٌّ منهما تحتوي فقط على التبعيات اللازمة لذلك الإصدار من Django.

مع هذا الإعداد، يمكنك تفعيل بيئة عمل واحدة عند العمل على مشروع، وأخرى عند العمل على مشروع آخر. الآن، يمكنك إرضاء أي عدد من العملاء في آنٍ واحد!

تقليل مشكلات إمكانية إعادة الإنتاج

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

إذا كنتَ تستخدم بايثون منذ فترة، فقد تتضمن بيئة بايثون العالمية لديكَ بالفعل جميع أنواع حزم الجهات الخارجية. إذا لم يكن الأمر كذلك، فهنيئًا لك! ربما ثبّتتَ إصدارًا جديدًا من بايثون مؤخرًا، أو تعرف بالفعل كيفية التعامل مع البيئات الافتراضية لتجنب تلوث النظام.

لتوضيح مشاكل إمكانية إعادة الإنتاج التي قد تواجهها عند مشاركة بيئة بايثون عبر مشاريع متعددة، سنلقي نظرة على مثال لاحق. تخيل أنك عملت على مشروعين مستقلين خلال الشهر الماضي:

  • مشروع استخراج بيانات الويب باستخدام Beautiful Soup
  • تطبيق Flask

على الرغم من عدم معرفتك بالبيئات الافتراضية، قمت بتثبيت جميع الحزم الضرورية في بيئة بايثون العالمية الخاصة بك:

PS> py -m pip install beautifulsoup4 requests
PS> py -m pip install flask

لقد أثبت تطبيق Flask الخاص بك فعاليته، لذا يرغب مطورون آخرون في العمل عليه أيضًا. عليهم إعادة إنتاج البيئة التي استخدمتها للعمل عليه. عليك تثبيت تبعياتك لمشاركة مشروعك عبر الإنترنت:

PS> py -m pip freeze
beautifulsoup4==4.12.3
blinker==1.8.2
certifi==2024.8.30
charset-normalizer==3.3.2
click==8.1.7
colorama==0.4.6
Flask==3.0.3
idna==3.8
itsdangerous==2.2.0
Jinja2==3.1.4
MarkupSafe==2.1.5
requests==2.32.3
soupsieve==2.6
urllib3==2.2.2
Werkzeug==3.0.4

أيٌّ من هذه الحزم مُلائم لتطبيق Flask الخاص بك، وأيٌّ منها مُرفقٌ هنا بفضل مشروع استخراج بيانات الويب؟ من الصعب تحديد متى تكون جميع التبعيات الخارجية في حزمة واحدة.

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

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

ما هي بيئة بايثون الافتراضية؟

في هذه المرحلة، أنت مقتنع برغبتك في العمل مع بيئات افتراضية. رائع، ولكن ما الذي ستعمل به عند استخدام بيئة افتراضية؟ إذا كنت ترغب في فهم ماهية البيئات الافتراضية، فهذا هو القسم المناسب لك.

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

هيكل المجلد

عندما تقوم بإنشاء بيئة افتراضية جديدة باستخدام وحدة venv، يقوم بايثون بإنشاء بنية مجلد مستقلة وينسخ أو يربط ملفات بايثون القابلة للتنفيذ في بنية المجلد تلك.

لستَ بحاجةٍ للتعمق في بنية هذا المجلد لمعرفة المزيد عن مكونات البيئات الافتراضية. بعد قليل، ستكتشف الهياكل عالية المستوى التي تكتشفها بعناية.

يحتوي مجلد البيئة الافتراضية على العديد من الملفات والمجلدات، ولكن قد تلاحظ أن معظم ما يجعل هيكل الشجرة هذا طويلًا جدًا يقع داخل مجلد site-packages/. إذا قلصت المجلدات الفرعية والملفات الموجودة فيه، ستحصل على هيكل شجرة سهل الاستخدام.

venv\
│
├── Include\
│
├── Lib\
│   │
│   └── site-packages\
│       │
│       ├── pip\
│       │
│       └── pip-24.2.dist-info\
│
│
├── Scripts\
│   ├── Activate.ps1
│   ├── activate
│   ├── activate.bat
│   ├── deactivate.bat
│   ├── pip.exe
│   ├── pip3.12.exe
│   ├── pip3.exe
│   ├── python.exe
│   └── pythonw.exe
│
└── pyvenv.cfg

توفر لك بنية الشجرة المختصرة هذه نظرة عامة أفضل على ما يحدث في مجلد البيئة الافتراضية لديك:

  • Include\ هو مجلد فارغ في البداية يستخدمه بايثون لتضمين ملفات رأس C للحزم التي قد تقوم بتثبيتها والتي تعتمد على ملحقات C.
  • يحتوي مجلد Lib\ على مجلد site-packages\، وهو أحد الأسباب الرئيسية لإنشاء بيئتك الافتراضية. هذا المجلد هو المكان الذي ستُثبّت فيه الحزم الخارجية التي ترغب في استخدامها داخل بيئتك الافتراضية. بدءًا من إصدار بايثون 3.12، تأتي بيئتك الافتراضية مُثبّتة مسبقًا مع تبعية واحدة فقط، وهي pip. ستتعرف على المزيد حول هذا لاحقًا.
  • يحتوي ملف Scripts\ على الملفات القابلة للتنفيذ لبيئتك الافتراضية. أبرزها مُفسّر بايثون (python.exe)، وملف pip القابل للتنفيذ (pip.exe)، ونص التنشيط لبيئتك الافتراضية، والذي يتوفر بإصدارات مختلفة تُمكّنك من العمل مع واجهات برمجة تطبيقات مختلفة. في هذا البرنامج التعليمي، استخدمتَ أمر activate، الذي يُدير تفعيل بيئتك الافتراضية لنظام ويندوز عبر معظم واجهات البرمجة.
  • يحتوي الدليل {name}-{version}.dist-info/، الذي تحصل عليه افتراضيًا لـ pip، على معلومات توزيع الحزمة الموجودة لتسجيل المعلومات حول الحزم المثبتة.
  • ملف pyvenv.cfg أساسي لبيئتك الافتراضية. يحتوي على بضعة أزواج مفتاح-قيمة فقط يستخدمها بايثون لتعيين المتغيرات في وحدة sys التي تحدد مُفسّر بايثون ومجلد حزم المواقع الذي ستستخدمه جلسة بايثون الحالية. ستتعرف على المزيد حول إعدادات هذا الملف عند قراءة كيفية عمل البيئة الافتراضية.

من خلال هذه النظرة الشاملة لمحتويات مجلد البيئة الافتراضية لديك، يمكنك التصغير بشكل أكبر لتكتشف أن هناك ثلاثة أجزاء أساسية للبيئة الافتراضية:

  • نسخة أو رابط رمزي لملف بايثون الثنائي
  • ملف pyvenv.cfg
  • دليل حزم المواقع

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

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

يمكنك التأكد من أن بايثون قام بتثبيت pip في بيئتك الافتراضية باستخدام pip list:

(venv) PS> python -m pip list
Package    Version
---------- -------
pip        24.2

قد تختلف أرقام الإصدار لديك، ولكن هذا الإخراج يؤكد أن بايثون قام بتثبيت pip عندما قمت بإنشاء البيئة الافتراضية بإعداداتها الافتراضية.

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

تُشكّل ملفات pip معظم محتوى بيئتك الافتراضية الجديدة. إذا تجنّبت النظر إلى محتويات الحزمة، فسيكون هيكلها أسهل بكثير.

إذا كنت تستخدم إصدار بايثون أقدم من 3.12، فستلاحظ وجود مجلدين إضافيين في مجلد site-packages/.

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

تذكر أن بيئتك الافتراضية هي مجرد هيكل مجلد، مما يعني أنه يمكنك حذفه وإعادة إنشائه وقتما تشاء. ولكن لماذا هذا الهيكل تحديدًا؟ وما الذي يُتيحه هذا الهيكل؟

تثبيت بايثون المعزول

تهدف بيئات بايثون الافتراضية إلى توفير بيئة بايثون خفيفة ومعزولة، يمكنك إنشاؤها بسرعة ثم التخلص منها عند عدم الحاجة إليها. هيكل المجلدات الذي استكشفته للتو يُمكّنك من ذلك من خلال توفير ثلاثة عناصر رئيسية:

  • نسخة أو رابط رمزي لملف بايثون الثنائي
  • ملف pyvenv.cfg
  • دليل حزم المواقع

تريد إنشاء بيئة معزولة بحيث لا تتعارض أي حزم خارجية تُثبّتها مع حزم المواقع العالمية. لتحقيق ذلك، يُعيد venv إنتاج بنية المجلدات التي يُنشئها تثبيت بايثون القياسي.

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

بالإضافة إلى مجلد بايثون الثنائي وحزم المواقع، ستجد أيضًا ملف pyvenv.cfg. وهو ملف صغير يحتوي على بضعة أزواج من المفاتيح والقيم فقط. مع ذلك، تُعد هذه الإعدادات أساسية لضمان عمل بيئتك الافتراضية:

home = C:\Users\Name\AppData\Local\Programs\Python\Python312
include-system-site-packages = false
version = 3.12.5
executable = C:\Users\Name\AppData\Local\Programs\Python\Python312\python312.exe
command = C:\Users\Name\AppData\Local\Programs\Python\Python312\python312.exe -m venv C:\Users\Name\path\to\project\venv

سوف تتعلم المزيد عن هذا الملف لاحقًا عند القراءة عن كيفية عمل البيئة الافتراضية.

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

ومع ذلك، إذا قمت ببدء تشغيل مُفسِّر بايثون من داخل بيئتك الافتراضية، فما زال بإمكانك الوصول إلى جميع الميزات الرائعة من المكتبة القياسية:

>>> import urllib
>>> from pprint import pp
>>> pp(dir(urllib))
['__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__path__',
 '__spec__']

في هذا المثال، قمتَ بنجاح باستيراد كلٍّ من وحدة urllib واختصار pp() من وحدة الطباعة الجميلة. ثم استخدمتَ dir() لفحص وحدة urllib.

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

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

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

بالإضافة إلى وحدات المكتبة القياسية، يمكنك اختياريا منح بيئتك الافتراضية حق الوصول إلى حزم موقع التثبيت الأساسي من خلال وسيطة عند إنشاء البيئة:

PS> py -m venv venv\ --system-site-packages

إذا أضفتَ --system-site-packages عند استدعاء venv، فسيُعيّن بايثون قيمة include-system-site-packages في ملف pyvenv.cfg إلى true. هذا الإعداد يعني أنه يمكنك استخدام أي حزم خارجية ثبّتها على بايثون الأساسي كما لو كنتَ ثبّتها في بيئتك الافتراضية.

يعمل هذا الاتصال في اتجاه واحد فقط. حتى لو منحت بيئتك الافتراضية حق الوصول إلى مجلد Site-Packages الخاص ببايثون المصدر، فلن تختلط أي حزم جديدة تُثبّتها في بيئتك الافتراضية مع الحزم الموجودة هناك. سيراعي بايثون الطبيعة المعزولة لعمليات التثبيت في بيئتك الافتراضية، ويضعها في مجلد Site-Packages المنفصل داخل البيئة الافتراضية.

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

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

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

يقوم بنسخ البنية والملفات

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

venv\
│
├── Include\
│
├── Lib\
│   │
│   └── site-packages\
│
├── Scripts\
│   ├── Activate.ps1
│   ├── activate
│   ├── activate.bat
│   ├── deactivate.bat
│   ├── pip.exe
│   ├── pip3.12.exe
│   ├── pip3.exe
│   ├── python.exe
│   └── pythonw.exe
│
└── pyvenv.cfg

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

يمكنك العثور على تثبيت Python الأساسي الذي تعتمد عليه بيئتك الافتراضية من خلال الانتقال إلى المسار الذي يمكنك العثور عليه أسفل مفتاح الصفحة الرئيسية في pyvenv.cfg.

ملاحظة: في نظام ويندوز، قد تلاحظ أن ملف python.exe في تثبيت بايثون الأساسي ليس موجودًا في مجلد Scripts\، بل في مجلد أعلى منه. في بيئتك الافتراضية، يكون الملف القابل للتنفيذ موجودًا عمدًا في مجلد Scripts.

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

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

إنه يتكيف مع عملية البحث عن البادئة

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

بدلاً من البحث عن وحدة نظام التشغيل لتحديد موقع المكتبة القياسية، يبحث مُفسّر بايثون أولاً عن ملف pyvenv.cfg. إذا عثر المُفسّر على هذا الملف وكان يحتوي على مفتاح رئيسي، فسيستخدمه لتعيين قيمة متغيرين:

  • سيحمل ملف sys.base_prefix المسار إلى ملف Python القابل للتنفيذ المستخدم لإنشاء هذه البيئة الافتراضية، والذي يمكنك العثور عليه في المسار المحدد أسفل مفتاح home في pyvenv.cfg.
  • سيشير sys.prefix إلى الدليل الذي يحتوي على pyvenv.cfg.

إذا لم يعثر المترجم على ملف pyvenv.cfg، فإنه يحدد أنه لا يعمل داخل بيئة افتراضية، وسيشير كل من sys.base_prefix وsys.prefix إلى نفس المسار.

إذا كانت قيم المتغيرين مختلفة، فسوف يتكيف Python مع المكان الذي سيبحث فيه عن الوحدات النمطية:

تم تعديل وحدات المكتبة القياسية للموقع وsysconfig بحيث يتم العثور على المكتبة القياسية وملفات الرأس بالنسبة إلى sys.base_prefix […]، بينما لا تزال أدلة حزمة الموقع […] موجودة بالنسبة إلى sys.prefix […]. (المصدر)

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

إنه يرتبط بمكتبتك القياسية

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

يتمتع ملف بايثون القابل للتنفيذ في بيئتك الافتراضية بإمكانية الوصول إلى وحدات المكتبة القياسية لتثبيت بايثون الذي بنيت عليه البيئة. يتيح بايثون ذلك بالإشارة إلى مسار ملف بايثون الأساسي القابل للتنفيذ في الإعداد الرئيسي في ملف pyvenv.cfg:

home = C:\Users\Name\AppData\Local\Programs\Python\Python312
include-system-site-packages = false
...

إذا انتقلتَ إلى مسار السطر المُميّز في ملف pyvenv.cfg وسردتَ محتويات المجلد، فستجد ملف بايثون الأساسي القابل للتنفيذ الذي استخدمته لإنشاء بيئتك الافتراضية. من هناك، يمكنك الانتقال للعثور على المجلد الذي يحتوي على وحدات المكتبة القياسية:

PS> ls C:\Users\Name\AppData\Local\Programs\Python\Python312

 Directory: C:\Users\Name\AppData\Local\Programs\Python\Python312

Mode              LastWriteTime      Length Name
----              -------------      ------ ----
d-----     09/01/2024   5:09 PM             DLLs
d-----     09/01/2024   5:09 PM             Doc
d-----     09/01/2024   5:09 PM             include
d-----     09/01/2024   5:09 PM             Lib
d-----     09/01/2024   5:09 PM             libs
d-----     09/01/2024   2:04 PM             Scripts
d-----     09/01/2024   5:09 PM             tcl
-a----     09/01/2024   4:28 AM       32762 LICENSE.txt
-a----     09/01/2024   4:29 AM     1225432 NEWS.txt
-a----     09/01/2024   4:28 AM       98544 python.exe
-a----     09/01/2024   4:28 AM       61680 python3.dll
-a----     09/01/2024   4:28 AM     4471024 python312.dll
-a----     09/01/2024   4:28 AM       97008 pythonw.exe
-a----     09/01/2024   4:29 AM       97168 vcruntime140.dll
-a----     09/01/2024   4:29 AM       37240 vcruntime140_1.dll

PS> ls C:\Users\Name\AppData\Local\Programs\Python\Python312\Lib

 Directory: C:\Users\Name\AppData\Local\Programs\Python\Python312\Lib

Mode              LastWriteTime      Length Name
----              -------------      ------ ----
d-----     09/01/2024   5:09 PM             asyncio
d-----     09/01/2024   5:09 PM             collections

...

-a----     09/01/2024   4:27 AM        5302 __future__.py
-a----     09/01/2024   4:27 AM          65 __hello__.py

تم إعداد بايثون للعثور على هذه الوحدات النمطية بإضافة المسار المناسب إلى sys.path. أثناء التهيئة، يستورد بايثون تلقائيًا وحدة  site، التي تُعيّن الإعدادات الافتراضية لهذه الوسيطة.

تحدد المسارات التي يمكن لجلسة بايثون الخاصة بك الوصول إليها في sys.path المواقع التي يمكن لـبايثون استيراد الوحدات النمطية منها.

إذا قمت بتنشيط بيئتك الافتراضية وأدخلت مفسر بايثون، فيمكنك التأكد من أن المسار إلى مجلد المكتبة القياسي لتثبيت بايثون الأساسي لديك متاح:

>>> import sys
>>> sys.path
['',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\python312.zip',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\DLLs',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\lib',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312',
 'C:\\Users\\Name\\path\\to\\venv',
 'C:\\Users\\Name\\path\\to\\venv\\lib\\site-packages']

نظرًا لأن المسار إلى الدليل الذي يحتوي على وحدات المكتبة القياسية لديك متاح في sys.path، فسوف تتمكن من استيراد أي منها عند العمل مع بايثون من داخل بيئتك الافتراضية.

يعدل PYTHONPATH الخاص بك

لتتأكد من أن البرامج النصية التي تريد تشغيلها تستخدم مترجم بايثون داخل بيئتك الافتراضية، يقوم venv بتعديل متغير البيئة PYTHONPATH الذي يمكنك الوصول إليه باستخدام sys.path.

إذا قمت بفحص هذا المتغير بدون بيئة افتراضية نشطة، فسترى مواقع المسارات الافتراضية لتثبيت بايثون الافتراضي لديك:

>>> import sys
>>> sys.path
['',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\python312.zip',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\DLLs',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\lib',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312',
 'C:\\Users\\Name\\AppData\\Roaming\\Python\\Python312\\site-packages',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\lib\\site-packages']

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

ملاحظة: يحتوي مجلد Roaming على نظام ويندوز على دليل إضافي لحزم المواقع، وهو مناسب للتثبيتات التي تستخدم علامة --user مع pip. يوفر هذا المجلد قدرًا محدودًا من المحاكاة الافتراضية، ولكنه يجمع جميع حزم --user المثبتة في مكان واحد.

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

>>> import sys
>>> sys.path
['',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\python312.zip',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\DLLs',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312\\lib',
 'C:\\Users\\Name\\AppData\\Local\\Programs\\Python\\Python312',
 'C:\\Users\\Name\\path\\to\\venv',
 'C:\\Users\\Name\\path\\to\\venv\\lib\\site-packages']

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

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

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

يقوم بتغيير متغير Shell PATH عند التنشيط

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

لتنشيط البيئة الافتراضية الخاصة بك، تحتاج إلى تنفيذ البرنامج النصي للتنشيط:

PS> venv\Scripts\activate
(venv) PS>

يعتمد برنامج التنشيط الذي ستقوم بتشغيله على نظام التشغيل الخاص بك والواجهة التي تستخدمها.

إذا بحثت في بنية مجلد البيئة الافتراضية لديك، فستجد بعض نصوص التنشيط المختلفة التي تأتي معها:

venv\
│
├── Include\
│
├── Lib\
│
├── Scripts\
│   ├── Activate.ps1
│   ├── activate
│   ├── activate.bat
│   ├── deactivate.bat
│   ├── pip.exe
│   ├── pip3.12.exe
│   ├── pip3.exe
│   ├── python.exe
│   └── pythonw.exe
│
└── pyvenv.cfg

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

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

حدث إجراءان حاسمان في البرنامج النصي للتنشيط:

  • المسار: يقوم بتعيين متغير VIRTUAL_ENV إلى مسار المجلد الجذر لبيئتك الافتراضية ويضيف الموقع النسبي لملف Python القابل للتنفيذ إلى PATH الخاص بك.
  • موجه الأوامر: يُغيّر موجه الأوامر إلى الاسم الذي استخدمته عند إنشاء البيئة الافتراضية. يأخذ هذا الاسم ويضعه بين قوسين، على سبيل المثال (venv).

يضع هذان التغييران راحة البيئات الافتراضية موضع التنفيذ داخل غلافك:

  • المسار: نظرًا لأن المسار إلى جميع الملفات القابلة للتنفيذ في بيئتك الافتراضية يعيش الآن في مقدمة PATH، فسوف يستدعي غلافك الإصدارات الداخلية من pip أو Python عندما تكتب pip أو python.
  • موجه الأوامر: نظرًا لأن البرنامج النصي غيّر موجه الأوامر الخاص بك، فستعرف سريعًا ما إذا كانت البيئة الافتراضية الخاصة بك نشطة أم لا.

كلا التغييرين تعديلان بسيطان وُجدا لراحتك فقط. ليسا ضروريين تمامًا، لكنهما يجعلان العمل مع البيئات الافتراضية أكثر متعة.

يمكنك فحص متغير PATH قبل وبعد تفعيل بيئتك الافتراضية. إذا فعّلت بيئتك الافتراضية، فسترى مسار المجلد الذي يحتوي على ملفاتك التنفيذية الداخلية في بداية PATH:

(venv) PS> $Env:Path
C:\Users\Name\path\to\venv\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Users\Name\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\Name\AppData\Local\Programs\Python\Python312\;c:\users\name\.local\bin;c:\users\name\appdata\roaming\python\python312\scripts

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

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

جرّبه وتفقّد التغييرات. هذا التغيير البسيط في متغير PATH يسمح لك بتشغيل الملفات القابلة للتنفيذ في بيئتك الافتراضية دون الحاجة إلى توفير المسار الكامل.

إنه يعمل من أي مكان بمسارات مطلقة

كما تعلمت، لستَ بحاجة لتفعيل بيئتك الافتراضية لاستخدامها. يمكنك العمل عليها دون تفعيلها، مع أن تفعيلها يُنصح به عادةً.

إذا أدخلتَ اسم ملف تنفيذي فقط إلى غلافك، فسيبحث عن الموقع المُسجَّل في مسار PATH للملف التنفيذي الذي يحمل هذا الاسم. ثم سيختار ويُشغِّل أول ملف يُطابق هذا المعيار.

يُغيّر نص التنشيط متغير PATH الخاص بك بحيث يكون مجلد الملفات الثنائية في بيئتك الافتراضية هو أول مكان يبحث فيه shell عن الملفات القابلة للتنفيذ. يتيح لك هذا التغيير كتابة pip أو python فقط لتشغيل البرامج الموجودة داخل بيئتك الافتراضية.

إذا لم تقم بتنشيط بيئتك الافتراضية، فيمكنك بدلاً من ذلك تمرير المسار المطلق لملف Python القابل للتنفيذ داخل بيئتك الافتراضية لتشغيل أي نص برمجي من داخل بيئتك الافتراضية:

PS> C:\Users\Name\path\to\venv\Scripts\python.exe

سيبدأ هذا الأمر تشغيل مترجم Python داخل بيئتك الافتراضية بنفس الطريقة تمامًا كما لو قمت بتنشيط البيئة الافتراضية أولاً ثم استدعائها باستخدام Python.

غالبًا ما تُفعّل بيئتك الافتراضية قبل العمل عليها وتُلغيها بعد الانتهاء. مع ذلك، هناك حالة استخدام يومية يكون فيها استخدام المسارات المطلقة نهجًا قيّمًا.

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

يُعدّ تضمين تفعيل بيئتك الافتراضية في نصك عمليةً مُرهِقةً، وغالبًا ما تُخطئ. بدلاً من ذلك، مُزوّدًا بالمعرفة التي اكتسبتها في هذا البرنامج التعليمي، يُمكنك استخدام المسار المُطلق لمُفسّر بايثون في بيئتك الافتراضية عند تشغيل نصك.

يمكنك استخدام هذا، على سبيل المثال، إذا كنت تقوم بإعداد مهمة CRON كل ساعة على خادم Linux البعيد والتي تتحقق من اتصال الموقع بشكل غير متزامن باستخدام حزمة aiohttp الخارجية التي قمت بتثبيتها في بيئة افتراضية:

0 * * * *
    /home/name/Documents/connectivity-checker/venv/bin/python
    -m rpchecker
    -u google.com twitter.com
    -a

لا داعي لتفعيل بيئتك الافتراضية لاستخدام مُفسّر بايثون المناسب الذي يمكنه الوصول إلى التبعيات التي ثبّتها داخلها. بدلًا من ذلك، يمكنك ببساطة تمرير المسار المطلق إلى الملف الثنائي الخاص بذلك المُفسّر. سيتولى بايثون الباقي نيابةً عنك أثناء التهيئة.

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

كيف يمكنك تخصيص بيئة افتراضية؟

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

تغيير موجه الأوامر

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

  • venv
  • env
  • .venv

في الممارسة العملية، يمكنك تسمية المجلد الذي تنشئه لبيئتك الافتراضية بأي اسم تريده.

ملاحظة: تسمية مجلد بيئتك الافتراضية بـ venv مجرد عرف. الالتزام بهذه القاعدة سيساعدك على استبعاد بيئتك الافتراضية من التحكم بالإصدارات باستخدام ملف .gitignore.

سوف يظهر الاسم الذي تختاره في موجه الأوامر بعد تنشيط البيئة الافتراضية:

PS> py -m venv your-fancy-name\
PS> your-fancy-name\Scripts\activate
(your-fancy-name) PS>

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

إذا كنت تريد راحة رؤية موجه أوامر مختلف، ولكنك تريد الاحتفاظ باسم المجلد الوصفي حتى تعرف أنه يحتوي على بيئة افتراضية، فيمكنك تمرير اسم موجه الأوامر المطلوب إلى --prompt:

PS> py -m venv venv\ --prompt dev-env
PS> venv\Scripts\activate
(dev-env) PS>

باستخدام الوسيطة الاختيارية --prompt، يمكنك تعيين موجه الأوامر الذي سيظهر عندما تكون بيئتك الافتراضية نشطة إلى سلسلة وصفية دون تغيير اسم مجلد بيئتك الافتراضية.

في مقتطفات الشفرة أعلاه، يمكنك أن ترى أنك لا تزال تستدعي المجلد venv، مما يعني أنه يمكنك الوصول إلى نص التنشيط بالمسار المألوف. في الوقت نفسه، سيكون موجه الأوامر الذي يظهر بعد التنشيط هو ما مررته إلى --prompt.

استبدال البيئات الموجودة

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

قبل تجربة ذلك، من المفيد أن تعلم أن تشغيل الأمر لإنشاء بيئة افتراضية جديدة بدون هذه الوسيطة لن يؤدي إلى استبدال بيئة افتراضية موجودة بنفس الاسم:

PS> py -m venv venv\
PS> venv\Scripts\pip.exe install requests
PS> venv\Scripts\pip.exe list
Package            Version
------------------ ---------
certifi            2024.8.30
charset-normalizer 3.3.2
idna               3.8
pip                24.2
requests           2.32.3
urllib3            2.2.2

PS> py -m venv venv\
PS> venv\Scripts\pip.exe list
Package            Version
------------------ ---------
certifi            2024.8.30
charset-normalizer 3.3.2
idna               3.8
pip                24.2
requests           2.32.3
urllib3            2.2.2

في هذا المثال، أنشأتَ بيئة افتراضية باسم venv، ثم استخدمتَ ملف pip الداخلي الخاص بالبيئة لتثبيت الطلبات في مجلد حزم الموقع (site-packages) الخاص ببيئتك الافتراضية. ثم استخدمتَ pip list  لتأكيد تثبيتها، مع اعتمادياتها.

في السطر المميز، حاولت إنشاء بيئة افتراضية أخرى باستخدام نفس الاسم، venv.

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

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

بدلاً من الانتقال إلى مجلد البيئة الافتراضية لديك وحذفه، يمكنك الكتابة فوق بيئة افتراضية موجودة بشكل صريح باستخدام --clear:

PS> py -m venv venv\
PS> venv\Scripts\pip.exe install requests
PS> venv\Scripts\pip.exe list
Package            Version
------------------ ---------
certifi            2024.8.30
charset-normalizer 3.3.2
idna               3.8
pip                24.2
requests           2.32.3
urllib3            2.2.2

PS> py -m venv venv\ --clear
PS> venv\Scripts\pip.exe list
Package    Version
---------- -------
pip        24.2

باستخدام نفس المثال السابق، أضفت الوسيطة الاختيارية --clear عند تشغيل أمر الإنشاء للمرة الثانية.

ثم أكدت أن Python قام تلقائيًا بتجاهل البيئة الافتراضية الموجودة بنفس الاسم وإنشاء بيئة افتراضية جديدة بدون الحزم المثبتة مسبقًا.

إنشاء بيئات افتراضية متعددة في وقت واحد

إذا لم تكن بيئة افتراضية واحدة كافية، فيمكنك إنشاء بيئات افتراضية منفصلة متعددة في وقت واحد عن طريق تمرير أكثر من مسار إلى الأمر:

PS> py -m venv venv\ C:\Users\Name\Documents\virtualenvs\venv-copy\

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

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

ملاحظة: الأمر الأكثر شيوعًا لإنشاء بيئة افتراضية، python3 -m venv venv/، يستخدم مسارًا نسبيًا من موقعك الحالي في غلافك ويقوم بإنشاء مجلد جديد باسم venv في هذا الدليل.

ليس عليك القيام بذلك. بدلاً من ذلك، يمكنك توفير مسار مطلق يشير إلى أي مكان في نظامك. إذا لم يكن أيٌّ من مساراتك موجودًا بعد، فسيقوم venv بإنشائها لك.

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

تحديث التبعيات الأساسية

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

WARNING: You are using pip version 23.2.4; however, version 24.2 is available.
You should consider upgrading via the
'C:\Users\Name\path\to\venv\Scripts\python.exe -m pip install --upgrade pip' command.

قد يكون من المُحبط ابتكار شيء جديد ثم اكتشاف أنه أصبح قديمًا! لماذا يحدث هذا؟

قد يكون تثبيت pip الذي ستتلقاه عند إنشاء بيئة افتراضية باستخدام التكوين الافتراضي لـ venv قديمًا لأن venv يستخدم ensurepip لتمهيد pip في بيئتك الافتراضية.

لا يتصل EnsurePip بالإنترنت عمدًا، بل يستخدم عجلة PIP المرفقة مع كل إصدار جديد من CPython. لذلك، تختلف دورة تحديث PIP المرفقة عن دورة تحديث مشروع PIP المستقل.

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

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

إذا كنت تريد توفير الجهد المبذول في القيام بذلك يدويًا، فيمكنك تحديد أنك تريد أن يتصل pip بـ PyPI ويقوم بتحديث نفسه مباشرةً بعد التثبيت عن طريق تمرير وسيطة --upgrade-deps:

PS> py -m venv venv\ --upgrade-deps
PS> venv\Scripts\activate
(venv) PS> python -m pip install --upgrade pip
Requirement already satisfied: pip in c:\users\name\path\to\venv\lib\site-packages (24.2)

لنفترض أنك تستخدم الوسيطة الاختيارية --upgrade-deps عند إنشاء بيئتك الافتراضية. في هذه الحالة، ستبحث PyPI تلقائيًا عن أحدث إصدار من pip وتُثبّته إذا لم تكن العجلة المحلية مُحدّثة.

لقد اختفت رسالة التحذير المزعجة، ويمكنك التأكد من أنك تستخدم الإصدار الأحدث من pip.

تجنب تثبيت pip

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

في معظم حالات الاستخدام، ستحتاج إلى تثبيت pip في بيئتك الافتراضية لأنك ستستخدمه على الأرجح لتثبيت حزم خارجية من PyPI. مع ذلك، إذا لم تكن بحاجة إلى pip لأي سبب، فيمكنك استخدام --without-pip لإنشاء بيئة افتراضية بدونه:

PS> py -m venv venv\ --without-pip
PS> (Get-ChildItem -Recurse .\venv\ | Measure-Object Length -Sum).Sum / 1MB
0.533046722412109

لا تزال بيئتك الافتراضية تقوم بكل ما يجعلها مؤهلة كبيئة افتراضية من خلال توفير عزل خفيف الوزن باستخدام ملف Python قابل للتنفيذ بشكل منفصل.

ملاحظة: حتى لو لم تُثبّت pip، فقد يبدو أن تشغيل pip install <package-name> يعمل. مع ذلك، لا تفعل ذلك، لأن تشغيل الأمر لن يُعطيك النتيجة المطلوبة. ستستخدم ملف pip قابلاً للتنفيذ من مكان آخر على نظامك، وستنتقل حزمتك إلى مجلد site-packages في أي تثبيت بايثون مرتبط بملف pip القابل للتنفيذ.

للعمل مع بيئة افتراضية لا تحتوي على pip مثبتًا، يمكنك تثبيت الحزم يدويًا في دليل site-packages أو وضع ملفات ZIP هناك ثم استيرادها باستخدام استيرادات Python ZIP.

ما هي الخيارات الشائعة الأخرى الموجودة بجانب venv؟

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

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

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

  • Virtualenv هو فرع من venv، ويشكل أساسًا لتطبيقه. إنه أداة قوية وقابلة للتوسيع لإنشاء بيئات بايثون معزولة.
  • تُقدّم Conda إدارةً للحزم والتبعيات والبيئات لبايثون ولغات أخرى. ما تُقدّمه Conda يتجاوز بكثير البيئات الافتراضية، ولكنه شائعٌ وسهل الاستخدام لدرجة أن البعض يستخدمه في المقام الأول لهذا الغرض.

يتمتع هذان المشروعان ببعض المزايا مقارنة بـ venv، ولكنهما لا يأتيان مع تثبيت بايثون القياسي، لذا سيتعين عليك تثبيتهما بشكل منفصل.

مشروع Virtualenv

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

الحزمة عبارة عن مجموعة فرعية من venv، تتيح لك القيام بكل ما يمكنك فعله باستخدام venv، وأكثر. يتيح لك Virtualenv ما يلي:

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

يمكن الاستفادة من أيٍّ من هذه الوظائف الإضافية عند العمل على مشاريع بايثون. قد ترغب أيضًا في حفظ مخطط بيئة افتراضية (Virtualenv) في الشيفرة البرمجية مع مشروعك لتسهيل إعادة إنتاج النتائج. تتميز بيئة Virtualenv بواجهة برمجة تطبيقات غنية تُمكّنك من وصف البيئات الافتراضية دون إنشائها.

بعد تثبيت virtualenv على نظامك، يمكنك إنشاء بيئة افتراضية جديدة وتنشيطها بنفس الطريقة التي تفعل بها ذلك باستخدام venv:

PS> virtualenv venv\
created virtual environment CPython3.12.5.final.0-64 in 312ms
  creator CPython3Windows(dest=C:\Users\Name\path\to\venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, via=copy, app_data_dir=C:\Users\Name\AppData\Local\pypa\virtualenv)
    added seed packages: pip==24.1
  activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
PS> Set-ExecutionPolicy Unrestricted -Scope Process
PS> venv\Scripts\activate
(venv) PS>

لتجنب الوقوع في مشكلات مع سياسة التنفيذ عند تنشيط البيئة الافتراضية الخاصة بك، قمت أولاً بتغيير سياسة التنفيذ لجلسة PowerShell الحالية باستخدام Set-ExecutionPolicy Unrestricted -Scope Process.

كما هو الحال مع venv، يمكنك تمرير مسار نسبي أو مطلق وتسمية بيئتك الافتراضية. قبل العمل في بيئة VirtualEnv، عادةً ما تُفعّلها باستخدام أحد البرامج النصية المُرفقة.

ملاحظة: قد تلاحظ أن virtualenv ينشئ البيئة المعزولة بسرعة أكبر بكثير من وحدة venv المضمنة، وهو أمر ممكن لأن الأداة تخزن بيانات التطبيق الخاصة بالمنصة والتي يمكنها القراءة منها بسرعة.

هناك ميزتان رئيسيتان للمستخدم مع virtualenv مقارنة بـ venv:

  • السرعة: يقوم Virtualenv بإنشاء البيئات بسرعة أكبر بكثير.
  • التحديثات: بفضل العجلات المضمنة في virtualenv، ستتلقى أدوات pip وsetuptools محدثة دون الحاجة إلى الاتصال بالإنترنت مباشرة عند إعداد البيئة الافتراضية لأول مرة.

إذا كنت بحاجة للعمل مع إصدارات بايثون 2.x القديمة، فقد يكون Virtualenv مفيدًا أيضًا. فهو يدعم بناء بيئات بايثون افتراضية باستخدام ملفات بايثون 2 القابلة للتنفيذ، وهو أمر غير ممكن باستخدام venv.

إذا كنتَ قد بدأتَ للتوّ باستخدام البيئات الافتراضية في بايثون، فقد ترغب في الاستمرار باستخدام وحدة venv المُدمجة. أما إذا كنتَ تستخدم venv منذ فترة وتواجه قيودًا في الأداة، فمن الأفضل البدء باستخدام virtualenv.

مدير الحزمة والبيئة في Conda

توفر لك Conda نهجًا بديلًا لإدارة الحزم والبيئات، يُغني عن pip وvenv في سير عملك. مع أن هذه الأداة مرتبطة بشكل أساسي بمجتمع علوم البيانات وتوزيعة Anaconda Python، إلا أن استخداماتها المحتملة تشمل إدارة الحزم والتبعيات والبيئات لأي لغة برمجة.

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

يقوم pip بتثبيت حزم بايثون داخل بيئة؛ ويقوم conda بتثبيت أي حزمة داخل بيئة conda. (المصدر)

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

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

يمكنك إعداد conda على نظامك باستخدام برنامج التثبيت Miniconda، الذي يوفر الحد الأدنى من المتطلبات لتشغيل conda على نظامك.

في إعداداته الافتراضية، يحصل conda على حزمه من repo.anaconda.com بدلاً من فهرس حزم بايثون (PyPI). يُدار فهرس الحزم البديل هذا بواسطة مشروع Anaconda، وهو مشابه لـ PyPI، ولكنه ليس مطابقًا له.

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

إذا كنت تعمل في مجال علوم البيانات ومع بايثون إلى جانب مشاريع علوم البيانات الأخرى، فإن Conda هو خيار ممتاز يعمل عبر الأنظمة الأساسية واللغات.

بعد تثبيت Anaconda أو Miniconda، يمكنك إنشاء بيئة conda:

PS> conda create -n &lt;venv-name>
Channels:
 - conda-forge
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: done
 
## Package Plan ##
 
  environment location: C:\Users\Name\miniconda3\envs\&lt;venv-name>
 
Proceed ([y]/n)? y
 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate &lt;venv-name>
#
# To deactivate an active environment, use
#
#     $ conda deactivate

لنفترض أن جلسة PowerShell القياسية لديك لا تتعرف على أمر conda بعد تثبيت Anaconda بنجاح. في هذه الحالة، يمكنك البحث عن موجه Anaconda PowerShell في برامجك والعمل عليه.

يؤدي هذا الأمر إلى إنشاء بيئة conda جديدة في موقع مركزي على جهاز الكمبيوتر الخاص بك.

ملاحظة: لأن جميع بيئات conda موجودة في نفس الموقع، يجب أن تكون جميع أسماء البيئات فريدة. لذلك، يُفضل إعطاؤها أسماءً وصفيةً بدلاً من تسمية أي بيئة conda بـ venv.

للعمل داخل بيئة conda الجديدة، ستحتاج إلى تنشيطها:

PS> conda activate &lt;venv-name>
(&lt;venv-name>) PS>

بعد تنشيط البيئة، يمكنك تثبيت الحزم من مستودع حزم conda في تلك البيئة:

(&lt;venv-name>) PS> conda install numpy

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

عندما تنتهي من العمل في البيئة، سيتعين عليك إلغاء تنشيطها:

(&lt;venv-name>) PS> conda deactivate
PS>

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

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

إذا كان لديك فقط تبعيات Python خالصة ولم تعمل مع Anaconda من قبل، فمن الأفضل أن تستخدم وحدة venv الأخف وزناً بشكل مباشر، أو تجربة virtualenv.

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


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

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

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading