أساسيات

إصدارات Python: Python 2 وPython 3، والجديد في 3.10–3.15، وأي إصدار تثبّت

آخر تحديث: · Skillaria.Top

الفرع المستخدم حالياً هو Python 3، وآخر إصدار مستقر هو Python 3.15 (صدر في 9 أكتوبر 2026)، أما Python 2 فلا يحصل على دعم منذ 2020. يصدر إصدار جديد كل عام في أكتوبر وتصل إليه التحديثات نحو خمس سنوات، لذلك للمشاريع الجديدة ثبّت أحدث إصدار 3.x، ولمعرفة الإصدار الحالي استخدم الأمر python3 --version.

الفرع الحي الوحيد للغة اليوم هو Python 3. آخر إصدار مستقر هو Python 3.15 الذي صدر في 9 أكتوبر 2026، أما Python 2 فقد انتهى دعمه رسمياً منذ عام 2020. فيما يلي الفروق بين إصدارات Python، وما الجديد في كل إصدار من 3.10 إلى 3.15، وأي إصدار تختار، وكيف تعرف الإصدار المثبّت لديك.

كيف تُرقَّم إصدارات Python

يتكون رقم الإصدار من ثلاثة أرقام، مثل 3.15.0. الرقم الأول هو الإصدار الرئيسي (فرع اللغة)، والثاني هو الإصدار الفرعي الذي تُضاف فيه ميزات جديدة، والثالث هو رقم التصحيح الذي يحمل إصلاحات الأخطاء فقط. وعندما يقال «إصدارات Python» يُقصد عادةً الإصدارات الفرعية: 3.10 و3.11 و3.12 وهكذا.

منذ عام 2019 يسري دورة سنوية (PEP 602): يصدر إصدار فرعي جديد كل أكتوبر. وقبل الإصدار بنحو ستة أشهر تصدر نسخ ألفا ثم بيتا ثم مرشحو الإصدار، وبعد الإصدار تأتي التصحيحات مثل 3.15.1 و3.15.2. والترقية بينها آمنة، فسلوك اللغة لا يتغير في إصدارات التصحيح.

ومن هنا يأتي الخلط في البحث: «python 311» و«python 3.11» هما الشيء نفسه، أي الإصدار 3.11. فالرقم ليس كسراً عشرياً، لذلك فالإصدار 3.10 أحدث من 3.9، والإصدار 3.15 أحدث من 3.2.

Python 2 وPython 3: ما الفرق

صدر Python 3 عام 2008 وكسر التوافق مع الإصدارات السابقة عمداً، لإصلاح الحلول القديمة في اللغة. لذلك كثيراً ما يحتاج كود Python 2 إلى تعديل كي يعمل في Python 3. وآخر إصدار من الفرع الثاني هو 2.7، وانتهى دعمه في 1 يناير 2020، وصدر الإصدار النهائي 2.7.18 في أبريل 2020.

الجانبPython 2Python 3
الطباعةprint "hi" — عاملprint("hi") — دالة
النصوصبايتات افتراضياً، ويُكتب Unicode بالشكل u"..."str — دائماً Unicode، والبايتات bytes
القسمة7 / 2 تعطي 37 / 2 تعطي 3.5، والقسمة الصحيحة 7 // 2
الإدخالraw_input()input()
المجالاتrange تبني قائمة، وxrange كسولةrange كسولة
الدعملا يوجد منذ 2020إصدار جديد كل عام

إذا وجدت درساً أو إجابة تُكتب فيها print دون أقواس، فهذا كود Python 2 والمادة قديمة. لا فائدة من تعلم الفرع الثاني اليوم: لا يُثبَّت في الأنظمة الجديدة، وتوقفت المكتبات عن دعمه منذ زمن، ولا تحتاج إليه إلا عند نقل كود قديم.

الجديد في Python 3.10–3.15

فيما يلي أهم ما في كل إصدار، أي ما يغيّر الكود اليومي. وقوائم التغييرات الكاملة موجودة في قسم What's New في التوثيق الرسمي.

Python 3.10 (أكتوبر 2021)

  • مطابقة الأنماط match/case (PEP 634) — تحليل بنى البيانات بدلاً من سلاسل if/elif.
  • دمج الأنواع بالخط العمودي: int | None بدلاً من Optional[int] (PEP 604).
  • عدة مديري سياق داخل أقواس في عبارة with واحدة.
  • رسائل أخطاء الصياغة أوضح بكثير.
def describe(point):
    match point:
        case (0, 0):
            return "نقطة الأصل"
        case (x, 0):
            return f"على المحور X: {x}"
        case _:
            return "في مكان آخر"

print(describe((3, 0)))  # على المحور X: 3

Python 3.11 (أكتوبر 2022)

  • السرعة: ساهم مشروع Faster CPython في تسريع المفسِّر بنحو الربع في المتوسط، وأكثر في بعض المهام.
  • مؤشرات دقيقة في الـtraceback: الأسهم ^^^^ تُظهر التعبير الذي سقط بالضبط في السطر (PEP 657).
  • مجموعات الاستثناءات وexcept* (PEP 654)، وملاحظات على الاستثناءات عبر add_note().
  • وحدة tomllib لقراءة TOML — مثل ملف pyproject.toml.

Python 3.12 (أكتوبر 2023)

  • صياغة جديدة للأنواع العامة: def first[T](items: list[T]) -> T والعامل type للأسماء المستعارة للأنواع (PEP 695).
  • f-strings أصبحت قواعد نحوية كاملة (PEP 701): يمكن داخلها استخدام الاقتباسات نفسها، والأسطر المتعددة، والتعليقات.
  • حُذفت الوحدة القديمة distutils من المكتبة القياسية.
  • تلميحات أكثر تفصيلاً في الأخطاء، مثل «نسيت استيراد الوحدة؟».
type Pair = tuple[int, int]

def first[T](items: list[T]) -> T:
    return items[0]

songs = ["a", "b"]
print(f"الأولى: {first(songs)!r}، والعدد {len(songs)}")
print(f"{"اقتباس داخل"}")  # يعمل من 3.12

وبالمناسبة، عن السؤال الشائع «f-strings من أي إصدار»: ظهرت f-strings أصلاً في Python 3.6، أما الحرية في الاقتباسات والأسطر داخل الأقواس المعقوفة فقد أضافها الإصدار 3.12.

Python 3.13 (أكتوبر 2024)

  • وحدة تفاعلية جديدة: ألوان، وتحرير متعدد الأسطر، وسجل أوامر، والأمران exit وhelp دون أقواس.
  • بناء تجريبي بلا GIL (free-threaded، PEP 703) ومترجم JIT تجريبي (PEP 744).
  • حُذفت «البطاريات الميتة» — وحدات قديمة مثل cgi وtelnetlib (PEP 594).
  • مدة تصحيح الأخطاء للإصدارات الجديدة صارت سنتين.

Python 3.14 (أكتوبر 2025)

  • سلاسل القوالب، t-strings: t"مرحباً، {name}" تعيد كائن قالب يمكن معالجته بأمان، لا نصاً جاهزاً (PEP 750).
  • تأجيل حساب التلميحات (PEP 649) — مشكلات أقل في الأنواع المعرّفة أسفل الملف.
  • بناء بلا GIL توقف عن كونه تجريبياً وحصل على دعم رسمي.
  • وحدة compression.zstd، وتلوين الصياغة في الوحدة التفاعلية، وexcept A, B: دون أقواس.

Python 3.15 (9 أكتوبر 2026)

  • الاستيراد الكسول lazy import (PEP 810): يُحمَّل الوحدة عند أول استخدام لا عند البدء. وفي القياس الوارد في الدورة بدأ سكربت فيه lazy import pandas خلال 14 مللي ثانية بدلاً من 280 مللي ثانية.
  • القاموس الثابت المدمج frozendict (PEP 814).
  • فك التغليف داخل قوائم الإدراج: [*g for g in groups] (PEP 798).
  • أداة القياس بالعينات Tachyon في المكتبة القياسية (PEP 799).
  • UTF-8 افتراضياً عند العمل مع الملفات (PEP 686) — نهاية مفاجآت الترميز على Windows.
  • اقتراحات «Did you mean» الجديدة في رسائل الأخطاء.
lazy import json                    # PEP 810
cfg = frozendict(limit=500)         # PEP 814
flat = [*g for g in [[1, 2], [3]]]  # PEP 798 -> [1, 2, 3]
print(flat, cfg["limit"])
# python -m profiling.sampling run app.py   # PEP 799, Tachyon

هذا الكود يعمل فقط على 3.15: في الإصدارات الأقدم تعطي lazy import وفك التغليف داخل comprehension خطأ SyntaxError، ويعطي frozendict خطأ NameError.

مواعيد دعم إصدارات Python

يعيش كل إصدار نحو خمس سنوات. يحصل أولاً على إصلاحات الأخطاء المعتادة وإصدارات التصحيح المنتظمة (منذ 3.13 لمدة سنتين)، ثم على تحديثات الأمان فقط حتى نهاية المدة. بعدها يُعد الإصدار منتهي العمر (end-of-life): لا يسد أحد الثغرات فيه بعد ذلك.

الإصدارالصدورنهاية الدعمالحالة في أكتوبر 2026
2.72010يناير 2020غير مدعوم
3.9أكتوبر 2020أكتوبر 2025غير مدعوم
3.10أكتوبر 2021أكتوبر 2026الدعم ينتهي
3.11أكتوبر 2022أكتوبر 2027تحديثات الأمان فقط
3.12أكتوبر 2023أكتوبر 2028تحديثات الأمان فقط
3.13أكتوبر 2024أكتوبر 2029إصلاحات الأخطاء
3.14أكتوبر 2025أكتوبر 2030إصلاحات الأخطاء
3.15أكتوبر 2026أكتوبر 2031الأحدث

تُنشر الحالة المحدّثة لكل فرع في صفحة Status of Python versions في دليل مطوّري Python. وقبل اختيار إصدار لمشروع طويل الأمد يُستحسن الاطلاع عليها.

أي إصدار من Python تثبّت

للتعلم والمشاريع الجديدة ثبّت آخر إصدار مستقر، وهو الآن Python 3.15. حجة «سأختار 3.10 المجرّب» لا تصلح: ففي أكتوبر 2026 يتوقف عن تلقي حتى تحديثات الأمان، وتعلم اللغة على إصدار يغادر الدعم يعني إعادة التعلم لاحقاً. وداخل Python 3 التوافق جيد: الكود المكتوب لإصدار قديم يعمل غالباً على الجديد، والعكس غير صحيح.

وهناك استثناءات. إذا لم تصدر المكتبة المطلوبة حزمها المبنية لأحدث إصدار بعد (وهذا يحدث في الأسابيع الأولى بعد إصدار أكتوبر للحزم التي تحتوي امتدادات بلغة C)، فخذ الإصدار السابق 3.14. وعلى خادم طويل العمر اتبع الإصدار الموجود في مستودعات توزيعة النظام، أو ثبّت الإصدار المطلوب عبر مدير الحزم uv. والقاعدة الأهم: لا تختار إصداراً تبقى على نهاية دعمه أقل من سنة.

الموقفما الذي تثبّته
تتعلم اللغة من الصفرآخر إصدار مستقر (3.15)
مشروع جديدالأحدث أو الذي قبله
المكتبة لا تدعم الجديدالإصدار الفرعي السابق
مشروع قديم على 3.10 أو أقلالتخطيط للانتقال إلى إصدار مدعوم
كود Python 2نقله إلى Python 3

كيف تعرف إصدار Python

في الطرفية يكفي أمر واحد. على macOS وLinux يُستخدم عادةً الأمر python3، وعلى Windows الأمر python أو المشغّل py.

$ python3 --version
Python 3.12.3        # إصدار قديم، حان وقت التحديث

$ python3 -V
Python 3.15.0

على Windows يعرض المشغّل كل الإصدارات المثبّتة دفعة واحدة، ويعرض uv الإصدارات التي يراها ويستطيع تثبيتها:

py --list
uv python list

من داخل البرنامج يعطي الإصدار الوحدة sys. ويسهل مقارنة الصف sys.version_info كي يتحقق السكربت بنفسه من ملاءمة المفسِّر:

import sys

print(sys.version)            # السطر الكامل مع تاريخ البناء
print(sys.version_info[:3])   # مثلاً (3, 15, 0)

if sys.version_info < (3, 10):
    raise SystemExit("مطلوب Python 3.10 أو أحدث")

إذا كان الأمر python3 --version يعرض إصداراً غير الذي ثبّته، فهذا يعني أن مفسِّراً آخر هو الأول في PATH. ولمعرفة أيّ مفسِّر هو، استخدم which python3 على macOS وLinux، أو where python على Windows.

عدة إصدارات على حاسوب واحد

وجود 3.13 و3.15 معاً أمر عادي: يُثبَّت كل إصدار في مجلد خاص. وأسهل طريقة لإدارتها هي uv: الأمر uv python install 3.15 ينزّل الإصدار، والأمر uv python pin 3.15 يثبّته للمشروع في الملف .python-version. ويُستحسن ألا تلمس Python النظام على Linux ولا تحدّثه يدوياً، فعليه تعمل أدوات نظام التشغيل نفسه.

الحد الأدنى لإصدار المشروع يُحدَّد في pyproject.toml في الحقل requires-python. عندها لن يسمح مدير الحزم بتثبيت المشروع على مفسِّر غير مناسب.

[project]
name = "expenses"
version = "0.1.0"
requires-python = ">=3.15"

الخلاصة

الإصدارات المستخدمة اليوم تنتمي إلى الفرع 3، وأحدثها 3.15 مع الاستيراد الكسول وfrozendict وUTF-8 افتراضياً. انتهى دعم Python 2 في 2020، ويتوقف دعم 3.10 في أكتوبر 2026، لذلك يُستحسن التعلم وبدء المشاريع على إصدار حديث. ولمعرفة إصدارك استخدم python3 --version. وفي الدورة يُختتم كل موضوع بكتلة «الجديد في 3.10–3.15»، فتُشرح تغييرات الإصدارات عملياً.

الأسئلة الشائعة

ما هو IDLE Python 3.10 64-bit في قائمة ابدأ؟

هذه بيئة التطوير البسيطة المدمجة التي يثبّتها المثبّت من python.org، ويذكر الاسم إصدار المفسِّر وعدد البتات. إذا كان فيه 3.10 فأنت على إصدار ينتهي دعمه، والأفضل تثبيت إصدار حديث.

هل يمكن ترقية Python 3.12 إلى 3.15 فوق القديم؟

الإصدارات الفرعية تُثبَّت جنباً إلى جنب، لا فوق بعضها: بعد تثبيت 3.15 يبقى القديم، ويمكن حذفه منفصلاً. ويجب تثبيت المكتبات للإصدار الجديد من جديد، أو إعادة إنشاء البيئة الافتراضية.

ما الفرق بين الإصدار 64-bit و32-bit؟

الإصدار 64-bit يستطيع استخدام ذاكرة أكبر ويناسب كل الحواسيب الحديثة، أما 32-bit فيُختار فقط للأنظمة القديمة جداً.

ما فائدة إصدارات ألفا وبيتا؟

هي إصدارات أولية من الإصدار التالي لاختبار المكتبات والمشاريع؛ للتعلم والعمل اختر الإصدارات النهائية فقط.

تعلّم هذا الموضوع بالفيديو

يُشرح هذا الموضوع بالتفصيل مع التطبيق العملي في دورة «Python 3.15: от новичка до профи».

الانتقال إلى الدورة