مقدمة
مشروع يحتاج 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أبداً.
تمرين عملي
- أنشئ مشروعاً جديداً ببيئة
.venvوثبّتrequests. - اكتب سكربتاً يجلب
https://api.github.comويطبع رمز الحالة. - أنشئ
requirements.txt، احذف.venv، ثم أعد إنشاءها من الملف وتأكد أن السكربت يعمل. - شغّل
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.