درس ۰۱: آشنایی با زبان برنامهنویسی پایتون¶

Photo by Michael Olsen¶
این درس با بیان تاریخچه ایجاد زبان برنامهنویسی پایتون شروع و با توصیفی کوتاه و شرح ویژگیهای آن ادامه مییابد؛ در شرح ویژگیها سعی شده است کمی نیز توضیحات غیرپایتونی برای درک بهتر موضوعات ارایه گردد. همچنین در مورد کارایی پایتون و سابقه نسخههای آن نیز صحبت شده است. هدف این درس ایجاد یک پیشزمینه بدون ابهام از پایتون است! به این امید که مفید باشد و بتواند شما را به یادگیری این زبان تشویق کند 😉.
✔ سطح: پایه
تاریخچه¶
داستان [1] پایتون از اواخر سال ۱۹۸۲ میلادی آغاز میشود، سالی که آقای روسوم پس از پایان دانشگاه به عنوان یک برنامهنویس وارد تیم توسعه زبان ABC در مرکز CWI واقع در آمستردام هلند میشود. ABC یک زبان برنامهنویسی تفسیرشده (Interpreted) با اهداف آموزشی است که از اواخر دهه هفتاد میلادی، تحت پروژهای در این مرکز آغاز شده بود. وی چهار یا پنج سال بعد، زمانی که از پروژه زبان ABC نتیجه مطلوب حاصل نمیگردد از آن خارج و به تیم توسعه سیستم عامل آمیب میپیوندد. این موضوع از آن جهت دارای اهمیت است که در هنگام کار بر روی این سیستم عامل بود که آقای روسوم به فکر ایجاد یک زبان اسکریپتی (Scripting Language) جدید میافتد.
در دسامبر سال ۱۹۸۹ میلادی، تعطیلات کریسمس فرصتی میشود تا آقای روسوم به ایده سرگرم کننده [2] خود بپردازد. البته پس از آن نیز زمان زیادی از وقتهای آزاد خود را برای پیشرفت پروژهای که ”Python“ نامیده بود صرف میکند. در این مسیر، تجربه کار بر روی زبان ABC و همینطور مطالعات وی بر روی زبان Modula-3 نقش فراوانی داشته است، در واقع او یک نسخه شخصی از بخشهای مورد علاقه خود از ABC ایجاد نمود. او یک ماشین مجازی ساده، یک تجزیهکننده (پارسرParser) ساده و یک سیستم زماناجرا (Runtime System) ساده ایجاد کرد؛ یک زبان با نحو (سینتکس Syntax) اولیه که از تورفتگی (Indentation) برای بلاکبندی بهره میبرد و از انواع داده [3] دیکشنری، لیست، رشته و اعداد پشتیبانی میکرد و بر خلاف ABC توسعهپذیر میبود.
یک سال بعد آقای روسوم از پایتون در پروژه آمیب استفاده میکند؛ نتیجه مطلوب و نیز بازخورد آن در بین همکارانش موجب میشود تا وی به بسیاری از بهینه سازیهای اولیه در پایتون اقدام نماید. این روند ادامه مییابد تا اینکه سرانجام در ماه دوم از سال ۱۹۹۱ میلادی این زبان را با نسخه 0.9.0 و تحت پروانهای مشابه با پروانه MIT از طریق یکی از «گروههای خبری» (یوزنت Usenet) با عنوان alt.sources منتشر میسازد که با استقبال بالایی نیز رو به رو میگردد.
"Python version 0.9.0 is released"
منشا انتخاب نام پایتون توسط آقای روسوم برخلاف تصور عمومی یا آنچه که از لوگوی آن مشاهده میشود به نوع خاصی از مار مربوط نمیشود!؛ در حقیقت این نام برگرفته از یک سریال کمدی تولید انگلستان با عنوان ”Monty Python's Flying Circus“ میباشد که پخش اصلی آن در طی سالهای ۱۹۶۹ تا ۱۹۷۴ میلادی از شبکه BBC One بوده است.
توصیفی کوتاه¶
سادگی و خوانایی از ویژگیهای بارز زبان برنامهنویسی پایتون است، آنچنان ساده که حتی کودکان نیز قادر به آموختن آن هستند و قدرت در کنار این سادگی و خوانایی، معجزه پایتون میباشد. از نگاه هر برنامهنویسی، برنامههای پایتون مجموعهای از سطرهای منظم هستند، بدون هیچ آشفتگی و پیچیدگی. این زبان به جای این که برنامهنویس را درگیر فهم ساختارش کند، به ابزاری قدرتمند برای تحقق تمام آنچه که در فکر اوست تبدیل میشود، اگر در اجرای نخست کدهای پایتون خود هیچ خطایی نگرفتید؛ تعجب نکنید! و اگر هم گرفتید، خوشحال باشید!. این زبان به شدت دوست داشتنی است 😍. ilovepython#
زبان برنامهنویسی پایتون همانطور که اشاره شد در سال ۱۹۹۱ میلادی توسط آقای روسوم خلق شده و توسعه آن نیز زیر نظر مستقیم اوست. آقای روسوم زاده سال ۱۹۵۶ میلادی و نخستین دارنده عنوان BDFL (دیکتاتور خیرخواه جاویدان) است. او پس از حضور در شرکتهای گوگل و دراپباکس، هم اکنون (سال 2023) در مایکروسافت مشغول به فعالیت است. (صفحه شخصی)
توسعه پایتون با عصر توسعه و محبوبیت زبانهای متن باز دیگری همچون Perl و Ruby هم زمان بوده که این امر به پیشرفت و توسعه آن کمک زیادی کرده است.
پایتون یک جامعه کاربری بسیار بزرگ و پویا به همراه خود دارد که عامل پیشرفت و توسعه بسیار مهمی برای هر زبان برنامهنویسی به شمار میرود. این جامعه هر ساله با برپایی همایشهای گوناگون در سراسر جهان به تبادل آموختهها میپردازد. یکی از رایجترین این همایشها PyCon (پایکان) میباشد که هر ساله در سراسر جهان برگزار میشود.
این زبان علاوه بر اینکه در توسعه برنامههای کاربردی زیادی به کار گرفته شده است، توسط شرکت یا سازمانهای مطرح زیادی نیز در امور گوناگون در حال استفاده است که از جمله این موارد میتوان به: reddit ،Pinterest ،Instagram (شبکههای اجتماعی) / Google (موتور جستجوگر و نیز سرویسهای یوتیوب و نقشه) / Yahoo (سرویس نقشه) / IBM ،Intel ،Cisco ،Seagate (تست سختافزار) / Netflix ،Spotify ،Uber ،Facebook ،Amazon ،Microsoft (تحلیل داده و ماشین لرنینگ) / Dropbox (سرویس میزبانی ابری فایل) / EVE Online (بازیهای آنلاین) / NASA ،Los Alamos (امور علمی) / iRobot (رباتیک) / Pixar ،Industrial Light and Magic ،Disney (ساخت فیلمهای انیمیشن) / BitTorrent (اشتراک فایل نظیر به نظیر) / CIA (وبسایت) / PayPal (سیستم انتقال پول آنلاین) / Mercurial (سیستم کنترل نسخه) / ESRI (نقشهبرداری در برنامه GIS) و بسیاری دیگر [4] اشاره نمود. (پایتون در stackshare)
مفسر زبان پایتون¶
تنها زبان قابل فهم و اجرا برای هر ماشین (یا رایانه)، زبان ماشین (Machine Language) خاص آن است که متناسب با معماری پردازنده آن تعیین میشود. درک و پیادهسازی این زبان برای انسان کاری طاقت فرساست، از این رو با پیشرفت دانش پردازش داده، زبانهای دیگر برنامهنویسی که به زبان انسان نزدیکتر هستند، توسعه یافته که تمامی آنها پیش از اجرا میبایست به زبان ماشین ترجمه شوند. چگونگی فرآیند این ترجمه، عاملی است که سبب تفاوت زبانهای برنامهنویسی و کاربرد آنها شده است. عمل ترجمه برای کدهای اسمبلی توسط اسمبلر (Assembler) و برای باقی زبانها توسط کامپایلر (Compiler) یا مفسر (Interpreter) انجام میپذیرد.
یک کامپایلر (در زبانهای کامپایلری مانند C) تمامی سطرهای سورس کد برنامه را به صورت یکجا خوانده و سپس با ساخت یک فایل جدید و مستقل از سورس کد با نام «کد مقصد یا آبجکت کد» (Object Code) یا فایل اجرایی (Executable) عمل ترجمه به زبان ماشین را پایان میبخشد. خروجی حاصل از کامپایلر توانایی هر چند بار اجرا در رایانه مقصد، بدون نیاز به کامپایل دوباره را دارد، اما فاقد حملپذیری بوده و برای اجرا در ماشینی با معماری متفاوت نیازمند کامپایل دوباره با یک کامپایلر سازگار میباشد. البته این ضعف در زبانهایی به مانند Java با ایجاد بایتکد (ByteCode) کاملا از بین رفته است. در طرفی دیگر، یک مفسر (در زبانهای تفسیری) سورس کد برنامه را به صورت سطر به سطر میخواند و هر سطر را به صورت جداگانه به زبان ماشین ترجمه و سپس بلافاصله آن را اجرا میکند. به این صورت که هنگامی یک سطر در حال اجراست در همان لحظه سطر بعدی در حال ترجمه به زبان ماشین میباشد. برنامههای نوشته شده با زبانهای برنامهنویسی تفسیری برای هر بار اجرا در رایانه هدف نیاز به تفسیر دوباره دارند. این تفاوت عملکرد گرچه باعث کاهش سرعت اجرای زبانهای تفسیری نسبت به کامپایلری میشود ولی خواندن سطر به سطر کدها در مفسر علاوه بر قابلیت تشخیص خطای بهتر، این امکان را بوجود میآورد که بتوان حتی در زمان اجرا نیز سورس کد را ویرایش و تغییر داد. این دسته از زبانها در مواقعی که پیوسته نیاز به ویرایش کد و اعمال تغییر است، بسیار مورد توجه قرار گرفتهاند.
پایتون در دسته زبانهای تفسیری قرار میگیرد که در ادامه با خصوصیات آن بیشتر آشنا خواهید شد. کدها و دستورات تهیه شده به این زبان برای به اجرا درآمدن توسط پردازنده (CPU) ماشین به یک مفسر نیاز دارد. تاکنون پیادهسازیهای گوناگونی و با اهداف متفاوتی از مفسر پایتون توسعه یافته است. در این بین، CPython (سیپایتون) پیادهسازی استاندارد و رسمی مفسر پایتون میباشد که با استفاده از زبان برنامهنویسی C توسعه مییابد. توسط CPython میتوان علاوه بر کدهای پایتون، کدهای توسعه یافته به زبانهای C و ++C را نیز در قالب یک پروژه به اجرا درآورد.
از دیگر پیادهسازی های مهم مفسر پایتون میتوان به Jython (خاص ماشین مجازی جاوا)، IronPython (خاص چارچوب NET. مایکروسافت)، PyPy (با هدف سرعت اجرای بیشتر)، Stackless (با هدف اجرای بهتر برنامههای چندنخی - Multithread) اشاره نمود. [5]
با این توضیحات اکنون میدانیم که مفسر پایتون وظیفه خواندن سورس کد برنامه، ترجمه به زبان ماشین و در نهایت اجرای آن را برعهده دارد. عمل ترجمه و اجرای سورس کد توسط CPython که مورد توجه این کتاب است، در دو مرحله متوالی زیر خلاصه میشود:
۱- کامپایل یا ترجمه سورس کد به بایتکد (ByteCode)
۲- تفسیر بایتکد به زبان ماشین و اجرای آن
به این صورت که ابتدا سورس کد برنامه به یک زبان میانی نزدیک به زبان ماشین با نام بایتکد ترجمه میشود و سپس بایتکد حاصل به ماشین مجازی (Virtual Machine) - به عنوان موتور زماناجرای پایتون - فرستاده و در آن تفسیر و اجرا میگردد.
توجه
با این که پایتون (پیادهسازی CPython) به عنوان یک زبان تفسیری شناخته میشود ولی در زماناجرا (RunTime) کدها را یکبار به بایتکد ترجمه میکند (با استفاده از یک کامپایلر).
توجه
ماشین مجازی پایتون (CPython VM) به صورت یک حلقه تکرار است که دستورات بایتکد را یکی یکی میخواند، به زبان ماشین تفسیر و بلافاصله اجرا میکند.
مفسر پایتون همچنین وظیفه اختصاص و آزادسازی حافظه (Memory) را به عهده دارد. CPython، برای آزادسازی حافظه از روش «شمارش ارجاع» (Reference Counting) استفاده میکند.
ویژگیها¶
پایتون یک زبان برنامهنویسی رایگان، متن باز (Open Source) و با بیانی کاملتر، آزاد است که هماکنون (یعنی از نسخه 2.1 و جدیدتر) پروانه آن توسط «بنیاد نرمافزار پایتون» PSF اداره میگردد. پروانه پایتون سازگار با پروانه GPL3 است، با این حال به برنامهنویس این اجازه را میدهد که بتواند برنامهای با سورس بسته (Closed Source) تولید نماید.
زبان پایتون از اجزای بسته نرمافزاری LAMP نیز به شمار میرود. این بسته عبارت است از: Linux ~ سیستم عامل / Apache ~ وب سرور / MySQL یا MariaDB ~ پایگاه داده / Python یا Perl یا PHP ~ زبان برنامهنویسی.
این زبان خیلی پیشتر از آنکه حتی Eric Raymond و Bruce Perens از Open Source صحبت کنند، متن باز بوده است.
پایتون یک زبان برنامهنویسی همه منظوره (General-Purpose) است به این معنی که میتوان از آن در توسعه طیف گستردهای از انواع برنامهها در حوزههای نرمافزاری گوناگون بهره برد؛ از جمله در توسعه برنامههای تحت وب و برنامههایی با قابلیت «واسط گرافیکی کاربر» (GUI).
پایتون یک زبان برنامهنویسی به همراه مجموعه بزرگی از قابلیتهای از پیش آماده و قابل حمل است که به عنوان کتابخانه استاندارد آن شناخته میشود. همچنین در کنار این کتابخانه میتوان از طیف بسیار وسیعی از کتابخانههای شخص ثالث (Third-Party) پایتون [6] نیز بهره برد. کتابخانههای شخص ثالث ابزارهای مفیدی را در امور فروانی همچون: برنامهنویسی علمی ~ SciPy / پردازش زبانهای طبیعی ~ NLTK / ارتباط درگاه سریال ~ PySerial / ایجاد بازی ~ PyGame ،Pyglet ،PyOpenGL ،PySoy / هوش مصنوعی و ماشین لرنینگ ~ PyBrain ،TensorFlow ،PyTorch ،NumPy ،Pandas ،Matplotlib / ایجاد وب سایت ~ Django ،Flask ،Bottle ،CherryPy / پردازش تصویر ~ PIL/Pillow ،PythonMagick / واسط گرافیکی کاربر ~ PyGtk ،PyQt ،WxPython / کار با اسناد rdflib ~ pdf / رمزنگاری ~ PyCrypto ،pyOpenSSL ،cryptography و بسیاری دیگر... که مدام در حال توسعه هستند و بر تعداد و تنوع آنها نیز افزوده میشود را در اختیار برنامهنویسان پایتون قرار میدهند.
پایتون یک زبان برنامهنویسی پویا (Dynamic) است. این زبان شباهتهایی با Perl ،Ruby ،PHP یا دیگر زبانهای برنامهنویسی پویا دارد. در این نوع زبانها برخلاف زبانهای ایستا (Static) مانند C++ ،C و Java نیازی به تعریف صریح نوع متغیرها [7] (Variables) نیست و همچنین نوع متغیر در طول برنامه قابل تغییر است. در زبانهای پویا متغیرها از خود نوعی ندارند و تصمیم گیری برای تخصیص نوع در «زمان اجرا» (RunTime) انجام میپذیرد.
با اینکه پایتون یک زبان پویاست ولی در عین حال یک زبان «وابسته شدید به نوع» (Strongly Typed) نیز میباشد. در این نوع زبانها (به مانند Java) تغییر خودکار نوع داده انجام نمیشود؛ به عنوان نمونه چنانچه در پایتون عمل جمع بین یک نوع داده عددی مانند 3
و یک نوع داده غیر عددی مانند "7"
صورت گیرد، یک Exception یا استثنای TypeError
گزارش میگردد. در مقابل، زبانهای «وابسته ضعیف به نوع» (Weak Typed) قرار دارند؛ در این زبانها (به مانند Perl) نوع بر حسب موقعیت به صورت خودکار تغییر داده میشود. در این مورد زبانهای برنامهنویسی رفتارهای متفاوتی دارند، به عنوان نمونه حاصل عبارت "7" + 3
در زبان Perl با تبدیل (Convert) خودکار نوع داده غیر عددی "7"
به عدد (7
)، مقدار 10
محاسبه میگردد.
نکته
استثنا در واقع وضعیت یا خطایی (Error) است که در برنامه پیشبینی شده و بروز آن به مانند یک اعتراض گزارش میشود. از طرفی در برنامه برای هر اعتراض، چگونگی رسیدگی به آن نیز تعریف میشود.
پایتون یک زبان برنامهنویسی سطح بالا (High-Level) به مانند C ،Ruby ،PHP و Java است که به وسیله آن عمل برنامهنویسی به آسانی و با سرعتی بالا انجام میپذیرد و برخلاف زبان برنامهنویسی سطح پایینی (Low-Level) مانند Assembly، برنامهنویس را درگیر مسایل خاص موجود در این سطح به مانند کار با ثباتها (Registers)، آدرسهای حافظه و غیره... نمیسازد.
نکته
بر اساس یک دستهبندی رایج [8]، زبانهای برنامهنویسی را میتوان به نسبت درگیر ساختن برنامهنویس با مفاهیم سختافزاری یا میزان سطح انتزاع (Abstraction) برنامهنویس از سختافزار، در دو سطح دستهبندی نمود: ۱. پایین ~ زبان ماشین و Assembly (اسمبلی) ۲. بالا ~ Java ،C++ ،C و غیره...
توجه
میزان انتزاع تمام زبانهای برنامهنویسی سطح بالا به یک نسبت نمیباشد؛ به عنوان نمونه میزان انتزاع زبان پایتون بیشتر از Java و سطح انتزاع Java نیز بسیار بیشتر از زبان C است:
Machine < Assembly < C < C++ < Java < Python
پایتون یک زبان برنامهنویسی چند الگویی (Multi-Paradigm) است و برنامهنویس را مجبور به رعایت الگوی خاصی نمیکند. این زبان از الگوهای: دستوری (Imperative) یا رویهای (Procedural)، تابعی (Functional) و شیگرایی (Object-Oriented) پشتیبانی میکند؛ البته همانظور که گفته شد نمیتوان پایتون را به صورت خالص (Pure) متعلق به هر یک از این الگوها دانست [9].
جدا از پشتیبانی الگوی برنامهنویسی شیگرا، ساختار پایتون به صورت کامل شیگراست و هر چیزی در این زبان یک شی (Object) است؛ در آینده بیشتر در این مورد صحبت خواهیم کرد.
پایتون یک زبان برنامهنویسی توسعهپذیر (Extensible) است. کدهای نوشته شده با پایتون را میتوان به دیگر سورس کدهای این زبان افزود و همچنین میتوان از کتابخانهها و کدهای نوشته شده با دیگر زبانهای برنامهنویسی در میان کدهای پایتون استفاده کرد (مانند C و ++C در پیادهسازی CPython یا Java در پیادهسازی Jython).
پایتون دارای دستور زبانی تمیز و خوانایی (Readability) بالای کد است. خوانایی در طراحی پایتون مورد تاکید بوده و در کنار شیگرایی از مهمترین ویژگیهای یک کد به جهت استفاده مجدد میباشد. پایتون به مانند زبان ABC از روش «تورفتگی» بوسیله فضاهای خالی برای بلاکبندی [10] استفاده میکند. در پایتون اجباری به استفاده از نقطه ویرگول (Semicolon) ;
و برخی پرانتز گذاریها نمیباشد و البته وجود انواع داده (Data Types) متنوع و نیز پویایی پایتون موجب کمتر شدن حجم کدنویسی و صرفهجویی در زمان توسعه نسبت به زبانهایی به مانند C++ ،C و حتی Java میشود. تحقیقات نشان میدهند: کاری که یک برنامهنویس پایتون میتواند در مدت زمان دو ماه به انجام برساند، دو برنامهنویس ++C در مدت یک سال قادر به تکمیل آن نخواهند بود!
پایتون یک زبان حساس به حرف (Case Sensitive) است. در این نوع زبانها (مانند C ،C++ ،Java ،Perl و غیره...) بین حروف کوچک (Lowercase) و بزرگ (Uppercase) به مانند a و A تفاوت وجود دارد. با توجه به این موضوع، مفسر پایتون بین کلمات True ،true و TRUE تمایز میگذارد.
کارایی¶
معمولا افراد در مواجه با یادگیری زبان پایتون نگرانیهایی در مورد کارایی (Performance) برنامههای توسعه یافته با این زبان خواهند داشت به خصوص در جایگاه مقایسه با زبان Java، به هر حال پایتون یک زبان تفسیری است و در اجرا سرعت کمتری نسبت به زبانهای کامپایلی مانند C و Java خواهد داشت. معمولا کارایی بالا برابر با سرعت بالاست ولی قضاوت در مورد کارایی به این سادگی درست نیست!
در هر پروژهای بسته به چیزی که میخواهیم میبایست انتخاب نماییم. اگر مبنای کارایی برای یک پروژه در سرعت بالای اجرا باشد (مانند برنامههای سیستمی)؛ زبان C همیشه بهترین انتخاب است ولی اگر مبنا در سرعت بالای توسعه و صرفه جویی در منابع از جمله هزینه باشد انتخاب مناسب پایتون است. گاهی نیز بهترین کارایی با استفاده ترکیبی از زبانهای متفاوت به دست میآید.
در بسیاری از کاربردها سرعت پایتون کاملا قابل قبول است، وجود بایتکد موجب افزایش سرعت در اجراهای بعدی برنامه میشود و نکات برنامهنویسی زیادی برای بهبود سرعت اجرا در پایتون وجود دارد که در این کتاب به تدریج اشاره خواهد شد. نباید فراموش کرد که یکی از مهمترین عاملهای کارایی داشتن الگوریتمی بهینه است و البته نوشتن ماژولها به زبان C نیز باعث افزایش قابل توجه سرعت اجرای پایتون میشود - پایتون کند است اگر اشتباه استفاده شود - با این وجود در حالت عادی اگر هزار مورد وجود داشته باشد که پایتون برای آنها بهترین انتخاب باشد، رقابت در سرعت یکی از آنها نخواهد بود و برای توسعه برنامههایی که سرعت اجرا نقش بسیار تعیین کنندهای دارد باید از زبانهای دیگری استفاده نمایید.
لازم است به این نکته هم توجه داشته باشیم که تمام این صحبتها در مورد پیادهسازی CPython از زبان پایتون بوده و پیادهسازیهای دیگری نیز از زبان پایتون با هدف سرعت بالای اجرا (به مانند PyPy) توسعه یافته است.
نسخهها¶
در یک سیر تاریخی، نسخه پایدار 2.0 در شانزدهم اکتبر سال ۲۰۰۰ میلادی و در ادامه نسخه 1.6 منتشر (Release) میشود؛ پس از آن نیز توسعه پایتون به همان صورت پیشین ادامه مییابد تا این که در دسامبر سال ۲۰۰۸ میلادی نسخهای از پایتون با شماره 3.0 که از آن با عنوان ”Python 3000“ یا ”Py3K“ نیز یاد میشود، با رویکرد شکستن «سازگاری با نسخههای پیشین» (Backward Compatibility) منتشر میگردد. به بیان دیگر: مفسر نسخههای جدید (3x) پایتون قادر به اجرای سورس کدی که بر پایه مفسر نسخههای پیشین تهیه شده است، نخواهد بود. (که این اتفاق در جامعه پایتون بسیار بحث برانگیز بوده و هست!)
ظاهرا آقای روسوم خیلی پیش از این زمان نیاز به ایجاد یک سری تغییرات در ساختار و سینتکس این زبان را احساس کرده بود. شاید نخستین نشانه از لزوم ایجاد تغییرات در پایتون را بتوان از صحبتهای ایشان در همایش متن باز اوریلی (OSCON) سال ۲۰۰۲ با عنوان «پشیمانیهای پایتون» (Python Regrets) دریافت کرد. به هر صورت تیم توسعه پایتون در پی رفع این نیاز، از بین حفظ گذشته پایتون و پایبندی به فلسفه سادگی آن؛ دومی را انتخاب میکند، ویژگیهای کهنه کنار گذاشته و ویژگیهای جدید جایگزین میگردند.
با انتشار یک نسخه جدید به صورت معمول میبایست توسعه نسخه قدیمی متوقف شود، ولی از آنجا که زیرساخت شرکتهای بزرگی به پایتون وابسته بوده (مانند Google) و ارتقا نسخه برای آنها حداقل بسیار زمانبر خواهد شد، برنامهها و کتابخانههای کوچک و بزرگ بسیار زیادی توسط کاربران جامعه پایتون برای نیازهای ریز و کلان گوناگونی توسعه یافته بود که سازگار شدن تمام آنها با نسخه جدید پایتون در یک فاصله زمانی کوتاه بعید به نظر میرسید و از همه مهمتر خود برنامهنویسان پایتون قرار داشتند که پس از سالها مجبور به پذیرش تغییرات شده بودند؛ تیم توسعه پایتون، برای پر کردن شکاف به وجود آمده در پایتون یا به بیانی هموار کردن مسیر مهاجرت به نسخه جدید پایتون، علاوه بر اینکه از پیش سعی کرده بود تا ویژگیهای جدید و سینتکس نسخه 3.0 را به نسخه 2.6 (که دو ماه زودتر منتشر شده بود) پورت (Port) کند، به توسعه نسخه قدیمی پایان نمیدهد و نسخه دیگری را با شماره 2.7 در سوم جولای ۲۰۱۰، تقریبا یک سال پس از انتشار نسخه 3.1 به همراه بسیاری از ویژگیهای جدید آن منتشر میسازد.
بر طبق سند [11] PEP 404، هرگز نسخهای با شماره 2.8 به صورت رسمی منتشر نخواهد شد و نسخه 2.7 با یک پشتیبانی طولانی مدت، نقطه پایان نسخه قدیمی پایتون خواهد بود. ابتدا قرار شد از این نسخه به مدت پنج سال پشتیبانی (تلاش برای رفع باگها) شود ولی کمی مانده تا پایان، این زمان به ده سال یعنی تا سال ۲۰۲۰ افزایش یافت.
نسخه پایدار (Stable) پایتون با قالب A.B.C؛ مانند 3.4.2 شمارهگذاری و منتشر میشود. عدد A، بخش اصلی (Major) شماره نسخه است و زمانی افزایش مییابد که واقعا تغییرات بزرگ و زیادی در زبان پایتون ایجاد شده باشد. عدد B، بخش جزئی (Minor) شماره نسخه را نشان میدهد و با ایجاد یک سری تغییرات مهم در زبان پایتون افزایش خواهد یافت. عموما شماره نسخه پایتون تنها به صورت A.B نشان داده میشود، زیرا عدد C تنها با رفع اشکال (Bug) احتمالی نسخه منتشر شده افزایش مییابد (از عدد صفر) که این امر نیز شامل همه نسخههای پایتون نمیشود.