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

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

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

مقدمة

مشروع يحتاج 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.

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

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

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