مشروع واحد، مجموعة مكتبات واحدة
تحتاج المشاريع إلى مكتبات خارجية مثل numpy أو pandas، وتحتاج مشاريع مختلفة إلى إصدارات مختلفة منها. وتثبيت كل شيء في بايثون واحدة مشتركة يجعل الإصدارات تتصادم: الترقية لمشروع تكسر آخر. البيئة الافتراضية مجلد خاص يحوي نسخته الخاصة من مفسّر بايثون ومكتباته المثبّتة، فيحصل كل مشروع على ما يحتاجه بالضبط. وpip هي الأداة التي تنزّل المكتبات من فهرس حزم بايثون (PyPI) وتثبّتها في البيئة النشطة.
# Create an environment in the project folder (once)
python -m venv .venv
# Activate it (every new terminal)
source .venv/bin/activate # macOS and Linux
.venv\Scripts\activate # Windows
# The prompt now shows (.venv); python and pip belong to it
python -c "import sys; print(sys.prefix)"
# Leave it
deactivateالتثبيت باستخدام pip
عندما تكون البيئة نشطة، يضيف pip install numpy مكتبة، ويثبّت pip install numpy==1.26.4 إصدارًا محددًا، ويرقّيها pip install -U numpy، ويزيلها pip uninstall numpy. ويعرض pip list ما هو مثبّت. استدعِه عند الشك بصيغة python -m pip فهذا يضمن أنه يتبع بايثون نفسها التي ستشغّلها. ولا تستخدم sudo pip أبدًا ولا تثبّت في بايثون النظام.
# Install, pin and inspect (environment active)
python -m pip install numpy pandas
python -m pip install "scipy>=1.11,<2"
python -m pip list
# Show one library
python -m pip show numpyrequirements.txt وقواعد الإصدار
يسرد ملف المتطلبات المكتبات التي يحتاجها المشروع، واحدة في كل سطر، ليتمكن أي شخص من إعادة بناء البيئة بـpip install -r requirements.txt؛ ويكتب pip freeze > requirements.txt الإصدارات المثبّتة بدقة. كل سطر اسم مع محدِّد إصدار اختياري: ==1.26.4 (بالضبط) و>=2.0 (على الأقل) و<3 (أقل من) و!=2.1 (أي شيء عدا) و~=1.4.2 (متوافق: 1.4.2 على الأقل مع بقائه 1.4.x). والأسطر التي تبدأ بـ# تعليقات. وتُقارن الإصدارات كأرقام جزءًا جزءًا، فـ1.10 أحدث من 1.9 لا أقدم.
# A version is a tuple of numbers, not a string
print("1.10" > "1.9") # False (text order is wrong!)
def version_tuple(text):
return tuple(int(part) for part in text.split("."))
print(version_tuple("1.10") > version_tuple("1.9")) # True
print(version_tuple("2.0.1")) # (2, 0, 1)
# Reading one requirements line
line = "numpy>=1.26 # for arrays"
name_and_spec = line.split("#", 1)[0].strip()
print(name_and_spec) # numpy>=1.26عادات تُبقي المشاريع قابلة لإعادة الإنتاج
أنشئ بيئة لكل مشروع وأبقها داخل المشروع باسم .venv، لكن لا ترفعها إلى التحكم بالإصدارات: فهي كبيرة وخاصة بجهازك. ارفع بدلًا منها requirements.txt (أو pyproject.toml). اكتب قواعد مرنة (>=) لما تحتاجه وثبّت إصدارات محددة (==) حين يجب إعادة إنتاج النتائج. وإذا ساء سلوك شيء فيمكنك دائمًا حذف .venv وإعادة بنائه في دقيقة من ملف المتطلبات.
# requirements.txt
numpy==1.26.4 # pinned: reproduce results exactly
pandas>=2.0 # at least 2.0
scipy~=1.11.0 # 1.11.x, but not 1.12
# plotting waits until we need it
# Rebuild the environment anywhere
python -m venv .venv
python -m pip install -r requirements.txt
# Record what is installed right now
python -m pip freeze > requirements.txtimport يفشل عند تشغيل كودك. تأكد من أن المحث يعرض (.venv) وأن python -c "import sys; print(sys.prefix)" يشير إلى داخل مشروعك قبل تثبيت أي شيء.python -m venv .venvثم فعّلها: بيئة لكل مشروع.python -m pip install name==versionوpip install -r requirements.txtوpip freeze.- المحدِّدات:
==و>=و<و!=و~=؛ قارن الإصدارات كصفوف أرقام؛ وارفع المتطلبات لا.venv.
التالي: أساسيات Git، لتتبع كل تغيير في كودك والعودة عندما ينكسر شيء.
المختبر: ما الذي يُقيَّم
- اقرأ سطر متطلب واحد باستخدام
parse_requirement25 نقطة - اقرأ ملف متطلبات كاملًا باستخدام
parse_requirements25 نقطة - اجعل الإصدارات قابلة للمقارنة باستخدام
version_tuple25 نقطة - تحقق من إصدار مقابل قاعدة باستخدام
satisfies25 نقطة