تحديث مكتبات Python باستخدام pip قد يصلح عيوبًا ويضيف دعمًا، لكنه قد يغير واجهات استدعاء يعتمد عليها مشروعك. لذلك لا يقدم هذا الدرس زرًا يرقّي بيئة الجهاز كلها دون مراجعة. سنحدد المفسر والبيئة، ونحفظ قائمة الإصدارات، ونراجع الحزم القديمة، ثم نحدث الحزم التي يحتاجها المشروع ونختبره. المكتبة الأحدث ليست بالضرورة متوافقة مع إصدار Python أو مع جميع تبعياتك.
التجهيز والمتطلبات
# Create an isolated environment:
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
python -m pip list --outdatedابدأ ببيئة افتراضية ونسخة قابلة للرجوع
نفذ python -m venv .venv داخل المشروع ثم فعّل البيئة بالأمر المناسب لنظامك. تحقق من python -m pip –version ومن مسار المفسر قبل أي تعديل. لحفظ لقطة الإصدارات الحالية استخدم python -m pip freeze > requirements-before.txt في بيئة المشروع الأصلية. هذه القائمة تسجل الإصدارات المثبتة لكنها لا تنسخ ملفات المشروع ولا قواعد البيانات، لذا احتفظ بنسخة من الكود وملفات الإعداد أيضًا.
مراجعة الحزم القديمة دون ترقيتها
يعرض python -m pip list –outdated الحزم التي لها إصدارات أحدث وفق الفهرس المتاح. السكربت أدناه ينفذ الاستعلام ويقرأ JSON ثم يطبع التقرير فقط؛ لا ينفذ install أو upgrade. يستخدم sys.executable لضمان أن pip تابع للمفسر نفسه. الاستعلام يحتاج اتصالًا بالفهرس وقد يفشل بسبب الشبكة أو إعدادات الوكيل. غياب حزمة من التقرير لا يعني خلوها من العيوب الأمنية.
المثال البرمجي الكامل
import json
import subprocess
import sys
def outdated_packages():
result = subprocess.run(
[sys.executable, "-m", "pip", "list", "--outdated", "--format=json"],
check=True, capture_output=True, text=True, timeout=120)
return json.loads(result.stdout)
if __name__ == "__main__":
for package in outdated_packages():
print(f"{package['name']}: {package['version']} -> {package['latest_version']}")
print("Review compatibility, then upgrade selected packages in your virtual environment.")
ترقية محددة ثم فحص التوافق
بعد مراجعة توثيق الحزمة وسجل التغييرات، جرّب مثلًا python -m pip install –upgrade pandas في بيئة اختبار. إذا احتاج المشروع إصدارًا مقيدًا، حدد المجال أو الإصدار في ملف المتطلبات بدل إزالة القيد عشوائيًا. نفذ python -m pip check لاكتشاف بعض تعارضات الاعتماد، ثم شغل اختبارات المشروع ووظائفه الرئيسية. pip check لا يكشف تغيّر سلوك دالة أو تغير مظهر واجهة، ولذلك لا يغني عن التجربة.
تثبيت النتيجة والرجوع عند الفشل
إذا نجحت الترقية، حدث ملف المتطلبات الخاص بالمشروع وسجل الإصدارات التي اختبرتها. عند الفشل أعد إنشاء بيئة جديدة من requirements-before.txt بدل محاولات متتابعة على بيئة مختلطة. قد تتطلب الإصدارات القديمة ملفات بناء أو نظامًا لم يعد مدعومًا، لذا اختبر الاستعادة مبكرًا. لا تستخدم sudo pip على مفسر النظام لحل مشكلة مشروع، ولا تنسخ أمر ترقية جماعية من الإنترنت دون فهم ما سيغيره.
لماذا لا نمرر قائمة الحزم كلها إلى upgrade؟
قد تكون بعض الحزم مثبتة كتبعية لإطار آخر يحتاج إصدارًا محددًا، وقد يغير إصدار رئيسي اسم دالة أو نوع ناتج. الترقية الجماعية تحول عدة تغييرات مستقلة إلى تجربة يصعب تشخيصها. حدّث حزمة أو مجموعة مترابطة، وراجع نتيجة محلل التبعيات واختبارات الوظائف. إذا كان المشروع منشورًا، نفذ التحقق في نسخة اختبار ثم انقل ملف الاعتمادات المعتمد بدل تعديل بيئة الإنتاج مباشرة أثناء خدمة المستخدمين.
ما الفرق بين pip check واختبار البرنامج؟
يفحص pip check علاقات الإصدارات المعلنة في بيانات الحزم، لكنه لا يشغل كودك ولا يختبر ملفات الإدخال أو واجهة المستخدم. قد تكون الاعتمادات متوافقة شكليًا مع أن دالة تستخدمها أزيلت أو تغير معناها. لهذا شغل استيراد الوحدات واختبارات العمليات المهمة، مثل قراءة CSV أو فتح نموذج محفوظ. احتفظ بتقرير يربط كل إصدار بالاختبار الذي نفذته كي تعرف سبب قبول الترقية وليس فقط أن أمر التثبيت انتهى دون خطأ.
هل يمكن تحديث pip نفسه؟
يمكن تحديثه داخل البيئة التي تتحكم بها عندما تحتاج إصدارًا مناسبًا، لكن لا تجعل ذلك جزءًا إلزاميًا من كل تشغيل للتطبيق. اقرأ دعم إصدار Python قبل اختيار نسخة جديدة، واستعمل python -m pip لتحديد المفسر المقصود. إذا كانت البيئة تديرها أداة أخرى أو نظام التشغيل، اتبع آليتها بدل فرض تحديث عام. نجاح تحديث مدير الحزم لا يعني أن حزم المشروع نفسها صارت محدثة أو أن المشروع متوافق معها.






