تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

البيئات الافتراضية وإدارة الحزم في Python: venv وpip وملفات المتطلبات

درسنُشر ٢٤ أكتوبر ٢٠٢٦ · 0 رد · 2 مشاهدة#python#venv#pip#حزم
قبل 3 ساعات

مقدمة

مشروع يحتاج Django 5، ومشروع آخر قديم يعمل على Django 3. لو ثبّت الحزم على مستوى النظام لاصطدم المشروعان، وقد تكسر أدوات النظام التي تعتمد على Python. الحل: بيئة افتراضية معزولة لكل مشروع، وملف يصف الإصدارات بدقة.

أهداف التعلم

  • إنشاء بيئة افتراضية وتفعيلها بـ venv.
  • تثبيت الحزم وتثبيت إصداراتها.
  • إنشاء ملف متطلبات قابل لإعادة الإنتاج.
  • معرفة pyproject.toml والأدوات الحديثة باختصار.

1. إنشاء البيئة وتفعيلها

python3 -m venv .venv
# Linux / macOS
source .venv/bin/activate
# Windows (PowerShell)
.venv\Scripts\Activate.ps1

python -m pip install --upgrade pip
which python   # يجب أن يشير إلى .venv

بعد التفعيل، أي pip install يذهب إلى .venv فقط. لإلغاء التفعيل: deactivate.

أضف .venv/ إلى .gitignore؛ البيئة نفسها لا تُرفع إلى المستودع، بل وصفها.

2. تثبيت الحزم

python -m pip install requests "fastapi>=0.110,<1"

استخدم python -m pip بدل pip وحده لتضمن أنك تستخدم pip الخاص بالـ Python الحالي.

3. ملف المتطلبات

python -m pip freeze > requirements.txt

ينتج شيئاً مثل:

certifi==2024.8.30
fastapi==0.115.0
requests==2.32.3

وعلى جهاز آخر أو خادم:

python3 -m venv .venv && source .venv/bin/activate
python -m pip install -r requirements.txt

freeze يثبت كل الحزم بما فيها التابعة. يفضل كثيرون فصل ملفين: requirements.in للحزم التي تطلبها مباشرة، وملف مولّد بالإصدارات الكاملة بأداة مثل pip-tools:

python -m pip install pip-tools
pip-compile requirements.in      # ينتج requirements.txt مثبت الإصدارات
pip-sync requirements.txt        # يجعل البيئة مطابقة تماماً

4. pyproject.toml والأدوات الحديثة

المشاريع الحديثة تصف نفسها في pyproject.toml:

[project]
name = "arabcode-bot"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
  "httpx>=0.27",
  "pydantic>=2.7",
]

[project.optional-dependencies]
dev = ["pytest>=8", "ruff>=0.6"]
python -m pip install -e ".[dev]"

وأدوات مثل uv وpoetry تجمع إنشاء البيئة وتثبيت الإصدارات وملف القفل (Lock file) في أمر واحد وبسرعة أعلى. المبدأ نفسه: بيئة معزولة + وصف دقيق للإصدارات.

5. الأمان

  • ثبّت الإصدارات حتى لا يدخل تحديث خبيث أو كاسر بصمت.
  • انتبه لأسماء الحزم المزيفة المشابهة للحقيقية (typosquatting): reqeusts ليست requests.
  • افحص الثغرات المعروفة: python -m pip install pip-audit && pip-audit.
  • لا تشغّل sudo pip install أبداً.

تمرين عملي

  1. أنشئ مشروعاً جديداً ببيئة .venv وثبّت requests.
  2. اكتب سكربتاً يجلب https://api.github.com ويطبع رمز الحالة.
  3. أنشئ requirements.txt، احذف .venv، ثم أعد إنشاءها من الملف وتأكد أن السكربت يعمل.
  4. شغّل pip-audit واقرأ النتيجة.

أخطاء شائعة

  • رفع مجلد .venv إلى Git.
  • نسيان تفعيل البيئة فتُثبت الحزم في مكان آخر.
  • ملف متطلبات بلا إصدارات (requests فقط) فيختلف السلوك بين الأجهزة.
  • خلط pip الخاص بإصدار Python آخر.

الخلاصة

بيئة معزولة لكل مشروع، تثبيت بـ python -m pip، وملف يصف الإصدارات بدقة. بهذه الثلاثة يعمل مشروعك بالطريقة نفسها على جهازك وجهاز زميلك والخادم.

مصادر مقترحة

  • توثيق Python: وحدة venv و«Installing Python Modules».
  • Python Packaging User Guide (packaging.python.org).
  • توثيق pip-tools وuv.

الرد على الموضوع

سجّل الدخول للمشاركة في النقاش.

نقاشات مشابهة