نسخههای مختلف پایتون برای هر نیاز برنامهنویسی
نسخههای مختلف پایتون برای هر نیاز برنامهنویسی
وقتی برای توسعه نرمافزار از پایتون استفاده میکنی، در واقع وارد یک اکوسیستم بزرگ از این زبان میشی که تعداد زیادی پکیج برای انواع نیازهای مختلف برنامهنویسی در اختیارت قرار میده. اما علاوه بر کتابخانههایی که از توسعه رابط کاربری گرفته تا یادگیری ماشین رو پوشش میدن، میتونی از بین چندین محیط اجرایی (runtime) مختلف پایتون هم انتخاب کنی – و بعضی از این محیطها ممکنه برای پروژهای که روش کار میکنی نسبت به بقیه مناسبتر باشن.
اینجا یک مرور کوتاه داریم روی توزیعهای مختلف پایتون: از پیادهسازی استانداردش (CPython)، تا نسخههایی که برای سرعت بهینه شدن (PyPy)، یا برای اهداف خاص طراحی شدن (Anaconda، ActivePython)، یا نسخههایی که روی runtimeهای زبانی متفاوت اجرا میشن (Jython، IronPython)، و حتی نسخههایی که برای موارد آزمایشی یا خاص ساخته شدن (MicroPython، RustPython).
CPython
CPython پیادهسازی اصلی و مرجع پایتون است – نسخه استانداردی که همه نسخههای دیگر این زبان به آن رجوع میکنن. CPython با زبان C نوشته شده (همون طور که از اسمش مشخصه) و توسط همون گروه اصلی توسعهدهندهای تولید میشه که مسئول تصمیمگیریهای سطح بالا درباره خود زبان پایتون هستن.
موارد استفاده CPython
به عنوان پیادهسازی مرجع پایتون، CPython از نظر بهینهسازی همیشه محافظهکارترین runtime بوده. نگهدارندههای پایتون میخوان CPython گستردهترین سازگاری ممکن و استانداردترین اجرای این زبان رو ارائه بده. با این حال، در چند نسخه اخیر بعضی بهینهسازیها اضافه شده تا پایتون به طور کلی سریعتر بشه، و کارهای بلندپروازانهتری هم برای آینده برنامهریزی شده – اما هیچوقت به قیمت از بین رفتن سازگاری رو به عقب (backward compatibility) نخواهد بود.
وقتی سازگاری با استانداردهای پایتون و مطابقت کامل با اونها از سرعت خام یا موارد دیگه برات مهمتره، CPython بهترین انتخابه. همینطور اگر برنامهنویس حرفهای هستی و میخوای با بنیادیترین نسخه پایتون کار کنی و حاضر هستی بعضی راحتیها رو کنار بذاری، CPython مناسبته.
مثلا در CPython برای ساخت محیطهای مجازی باید کمی بیشتر کار کنی. توزیعهای دیگه (به خصوص Anaconda) اتوماسیون بیشتری برای راهاندازی workspace فراهم میکنن.
محدودیتهای CPython
CPython خیلی از بهینهسازیهای عملکردیای که در نسخههای دیگه پایتون وجود دارن رو نداره. نه کامپایلر JIT (just-in-time) داره، نه کتابخانههای ریاضی شتابدادهشده، و نه افزونههای شخص ثالث برای بهبود سرعت. البته میتونی این قابلیتها رو خودت اضافه کنی، اما به صورت پیشفرض همراهش نیستن. این موضوع کاملا عمدی بوده تا بیشترین سازگاری ممکن حفظ بشه و CPython همچنان نقش پیادهسازی مرجع رو ایفا کنه. اما نتیجه اینه که هر نوع بهینهسازی عملکردی به عهده خود توسعهدهنده است.
علاوه بر این، CPython فقط مجموعه حداقلی از ابزارها رو برای کار با پایتون ارائه میده. مثلا ابزار pip پکیجها رو از مخزن رسمی PyPI دریافت و نصب میکنه. pip حتی میتونه باینریهای کامپایلشده آماده رو (از طریق فرمت wheel) نصب کنه اگر در اختیارش قرار بدی. اما pip هیچ وابستگیای رو که خارج از PyPI باشه نصب نمیکنه.
Anaconda Python
Anaconda که توسط شرکت Anaconda Inc. (که قبلا Continuum Analytics نام داشت) تولید میشه، برای برنامهنویسهایی طراحی شده که به یک توزیع پایتون نیاز دارن که پشتش یک شرکت تجاری وجود داشته باشه و قابلیت ارائه پشتیبانی سازمانی داشته باشه. مهمترین کاربردهای Anaconda Python شامل ریاضیات، آمار، مهندسی، تحلیل داده، یادگیری ماشین و کاربردهای مرتبط با این حوزههاست.
موارد استفاده Anaconda Python
Anaconda بسیاری از کتابخانههای رایج که در کارهای علمی و تجاری پایتون استفاده میشن – مثل SciPy، NumPy، Numba و غیره – رو همراه خودش ارائه میده و تعداد زیادی از کتابخانههای دیگه رو هم از طریق یک سیستم مدیریت پکیج اختصاصی در دسترس قرار میده.
یکی از ویژگیهایی که Anaconda رو از بقیه توزیعها متمایز میکنه، نحوه یکپارچهسازی این ابزارهاست. بعد از نصب، Anaconda یک اپ دسکتاپ به نام Anaconda Navigator ارائه میده که از طریق رابط گرافیکی، همه بخشهای محیط Anaconda رو در اختیار کاربر میذاره. پیدا کردن کتابخانهها، بهروزرسانی اونها و کار باهاشون با Anaconda به مراتب سادهتر از CPython و تنظیمات دستی اون هست.
یک مزیت مهم دیگه، نحوه مدیریت Anaconda برای اجزاییه که خارج از اکوسیستم پایتون هستن اما برای یک پکیج خاص لازم میشن. مدیر پکیج conda که به صورت اختصاصی برای Anaconda ساخته شده، هم پکیجهای پایتونی رو نصب میکنه و هم نرمافزارهای جانبی خارجی مورد نیاز رو.
محدودیتهای Anaconda Python
از اونجایی که Anaconda تعداد زیادی کتابخانه مفید رو شامل میشه و امکان نصب دهها پکیج دیگه رو با چند ضربه کلید فراهم میکنه، اندازه نصب Anaconda ممکنه خیلی بزرگتر از CPython باشه. نصب پایه CPython حدود 100 مگابایته، ولی نصب Anaconda میتونه به چندین گیگابایت برسه. این موضوع در شرایطی که منابع محدود باشه دردسرسازه.
یکی از روشهای کم کردن حجم Anaconda اینه که Miniconda رو نصب کنی. Miniconda نسخه خلاصهشده Anaconda هست که فقط حداقلهای لازم برای اجرا رو شامل میشه. بعدش میتونی هر پکیجی رو که لازم داشتی به تدریج به Miniconda اضافه کنی و دقت کنی هر کدوم چقدر فضا مصرف میکنن.
ActiveState Python
مثل Anaconda، ActiveState Python هم توسط یک شرکت تجاری ساخته و نگهداری میشه – در این مورد، شرکت ActiveState که مجموعهای از runtimeهای زبانهای مختلف رو ارائه میده و همچنین IDE چندزبانه Komodo رو هم عرضه میکنه.
موارد استفاده ActiveState Python
ActiveState Python برای کاربران سازمانی و دانشمندان داده طراحی شده – افرادی که میخوان از پایتون استفاده کنن، اما نمیخوان زمان زیادی برای جمعآوری، نصب و مدیریت یک محیط پایتون صرف کنن. ActiveState از همان مدیر بسته استاندارد پایتون یعنی pip استفاده میکنه، اما علاوه بر اون چند صد کتابخانه رایج رو به صورت بستههای تاییدشده همراه خودش ارائه میده. همچنین برخی کتابخانههایی که وابستگیهای پیچیده شخص ثالث دارن، مثل Intel Math Kernel Library رو هم تامین میکنه.
محدودیتهای ActiveState Python
یک مشکل احتمالی در رویکرد ActiveState برای مدیریت پکیجهایی که وابستگیهای خارجی دارن اینه که اگر بخوای یک نسخه جدیدتر از پروژهای با وابستگیهای پیچیده رو نصب کنی (مثلا TensorFlow)، باید نسخه ActiveState Python خودت رو هم ارتقا بدی. در محیطهایی که توسعه به یک نسخه مشخص و ثابت از یک پروژه وابسته است، این موضوع مشکل جدیای ایجاد نمیکنه. اما در محیطهایی که توسعه باید همزمان با جدیدترین نسخهها پیش بره، میتونه دردسرساز بشه.
علاوه بر این، نسخههای ActiveState Python معمولا از نسخههای جدید CPython عقبتر هستن. مثلا در زمان نوشتن این مقاله، جدیدترین نسخه پشتیبانیشده پایتون 3.12 هست، اما ActiveState فقط نسخه 3.10 رو ارائه میده.
PyPy
PyPy یک جایگزین مستقیم برای مفسر CPython هست و با استفاده از کامپایل JIT سرعت اجرای برنامههای پایتونی رو افزایش میده. بسته به نوع کار، این افزایش سرعت میتونه فوقالعاده چشمگیر باشه.
موارد استفاده PyPy
یکی از رایجترین شکایتها درباره پایتون و مخصوصا CPython، سرعت پایینشه. پایتون در حالت عادی خیلی کندتر از زبان C اجرا میشه – گاهی دهها برابر و حتی صدها برابر کندتر. PyPy کد پایتون رو با استفاده از JIT به زبان ماشین کامپایل میکنه و به طور متوسط سرعت رو 4.8 برابر سریعتر از CPython میکنه. بعضی وظایف حتی تا 50 برابر سریعتر اجرا میشن.
بهترین نکته اینه که برای به دست آوردن این افزایش سرعت، تقریبا هیچ کاری لازم نیست انجام بدی. کافیه CPython رو با PyPy جایگزین کنی و عملا کار تمومه. همچنین PyPy روی تمام پلتفرمهای اصلی در نسخههای 64 بیتی پشتیبانی میشه – ویندوز، لینوکس سازگار با CentOS 7 (برای ARM64 و Intel) و macOS (برای ARM64 و Intel).
محدودیتهای PyPy
PyPy همیشه بهترین عملکردش رو روی برنامههایی داشته که کاملا با پایتون نوشته شدن. پکیجهایی که با کتابخانههای C تعامل دارن، مثل NumPy، به خاطر نحوه شبیهسازی رابطهای باینری CPython توسط PyPy، عملکرد خوبی نداشتن. البته در گذر زمان، توسعهدهندههای PyPy به تدریج این مشکلات رو کمتر کردن و سازگاری PyPy با اکثر پکیجهایی که به افزونههای C وابستهاند خیلی بهتر شده. خلاصه اینکه پشتیبانی از افزونههای C هنوز محدودیتهایی داره، اما نسبت به گذشته بسیار بهتر شده.
یک نکته منفی احتمالی دیگه درباره PyPy اندازه runtime اون هست. هسته CPython روی ویندوز – بدون کتابخانه استاندارد – حدود 6 مگابایته، در حالی که runtime مربوط به PyPy حدود 43 مگابایت حجم داره.
Jython
ماشین مجازی جاوا (JVM) به عنوان runtime برای تعداد زیادی از زبانها استفاده میشه، نه فقط جاوا. این فهرست شامل Kotlin، Groovy، Scala، Clojure و همینطور پایتون از طریق پروژه Jython هم میشه.
موارد استفاده Jython
Jython کدهای Python 2.x رو به بایتکد JVM کامپایل میکنه و برنامه حاصل روی JVM اجرا میشه. در بعضی موارد، برنامهای که با Jython کامپایل شده سریعتر از نسخه CPython اجرا میشه، اما همیشه اینطور نیست.
بزرگترین مزیت Jython قابلیت تعامل مستقیم با کل اکوسیستم جاواست. اجرای پایتون روی JVM باعث میشه توسعهدهندههای پایتون بتونن از یک اکوسیستم عظیم از کتابخانهها و فریمورکهای جاوا استفاده کنن؛ چیزهایی که در حالت عادی بهشون دسترسی نداشتن. همینطور Jython به توسعهدهندههای جاوا اجازه میده از کتابخانههای پایتون استفاده کنن.
محدودیتهای Jython
بزرگترین نقطهضعف Jython اینه که فقط از نسخه 2.x پایتون پشتیبانی میکنه. پشتیبانی از Python 3.x در دست توسعه است، اما تا الان هیچ نسخهای منتشر نشده. همچنین توجه داشته باش که اگرچه Jython پایتون رو به JVM میاره، اما پایتون رو به اندروید نمیاره. چون تاکنون هیچ نسخهای از Jython برای اجرای مستقیم روی اندروید ارائه نشده، Jython قابل استفاده برای توسعه اپلیکیشنهای اندرویدی نیست.
IronPython
همونطور که Jython یک پیادهسازی از پایتون روی JVM هست، IronPython هم یک پیادهسازی از پایتون روی runtime داتنت، یعنی CLR (Common Language Runtime) به حساب میاد. IronPython از DLR (Dynamic Language Runtime) موجود در CLR استفاده میکنه تا برنامههای پایتون بتونن با همان سطح از پویایی که در CPython دارن اجرا بشن.
موارد استفاده IronPython
مثل Jython، IronPython هم یک پل ارتباطی محسوب میشه. کاربرد اصلیش ایجاد قابلیت سازگاری و تعامل بین پایتون و دنیای .Net هست. اسمبلیهای موجود در .Net رو میشه داخل برنامههای IronPython فقط با استفاده از import و سینتکس استاندارد پایتون برای کار با آبجکتها لود کرد. همچنین میشه کدهای IronPython رو کامپایل کرد و اونها رو به صورت یک اسمبلی اجرا کرد یا از زبانهای دیگه فراخوانی کرد.
اما یک نکته مهم اینه که کد MSIL (Microsoft Intermediate Language) داخل اسمبلی IronPython رو نمیتونی مستقیما از زبانهای دیگه .Net استفاده کنی، چون این کد مطابق با Common Language Specification نیست.
محدودیتهای IronPython
IronPython از Python 2.7 و همچنین Python 3 پشتیبانی میکنه، اما جدیدترین نسخه Python 3 که پشتیبانی میشه فقط Python 3.4 هست. این موضوع میزان سازگاری IronPython با اکوسیستم پایتون رو به شدت محدود میکنه، چون نسخه 3.4 خیلی مدتهاست که دیگه پشتیبانی نمیشه و بخش زیادی از کتابخانههای جدید با این نسخه سازگار نیستن.
WinPython
همونطور که از اسمش پیداست، WinPython یک توزیع پایتون هست که به طور ویژه برای کاربران Microsoft Windows ساخته شده. نسخههای اولیه CPython برای ویندوز چندان خوب طراحی نشده بودن و کاربران ویندوز نمیتونستن به شکل کامل از اکوسیستم پایتون استفاده کنن. با اینکه نسخه ویندوز CPython در طول زمان بهتر شده، WinPython هنوز امکاناتی ارائه میده که در CPython پیدا نمیشن.
موارد استفاده WinPython
جذابترین ویژگی WinPython اینه که یک نسخه کاملا خودکفای پایتون محسوب میشه. لازم نیست روی سیستم نصب بشه؛ فقط کافیه داخل یک دایرکتوری extract بشه. این ویژگی WinPython رو برای شرایط زیر بسیار مناسب میکنه:
-
جاهایی که امکان نصب نرمافزار روی سیستم وجود نداره
-
زمانی که باید یک محیط پایتون از قبل پیکربندی شده همراه با برنامهها توزیع بشه
-
یا وقتی که قرار چند نسخه پایتون کنار هم اجرا بشن بدون اینکه با هم تداخل داشته باشن
خود CPython هم یک نسخه unpack-and-run داره که بهش “embeddable redistribution” گفته میشه، اما این نسخه با حداقلیترین مجموعه بستهها ارائه میشه. در مقابل، WinPython تعداد زیادی بسته مرتبط با دیتا ساینس مثل NumPy، Pandas، SciPy، Matplotlib و… رو به صورت پیشفرض همراه داره تا بدون هیچ مرحله نصب اضافه قابل استفاده باشن.
یک کامپایلر C/C++ هم داخلش هست، چون خیلی از سیستمهای ویندوز به صورت پیشفرض کامپایلر ندارن و خیلی از افزونههای پایتون به کامپایلر نیاز دارن یا میتونن ازش استفاده کنن.
محدودیتهای WinPython
یکی از محدودیتهای WinPython اینه که ممکنه برای بعضی کاربردها حجم زیادی از بستهها رو از پیش نصب کرده باشه. برای حل این مشکل، سازندگان WinPython یک نسخه “zero” از هر انتشار ارائه میدن که فقط حداقلیترین نسخه ممکن از محصوله. بستههای بیشتر رو میشه بعدا با pip خود پایتون یا ابزار WPPM مخصوص WinPython نصب کرد.
Python Portable
Python Portable نسخهای از runtime CPython است که در قالب یک بسته خودکفا ارائه میشود. این بسته بخشی از مجموعه PortableDevApps است که شامل برنامههای خودکفای مشابه دیگری هم میشود.
موارد استفاده Python Portable
مثل WinPython، Python Portable مجموعهای از بستهها برای محاسبات علمی – مانند Matplotlib، Numba، SymPy، SciPy، Cython و غیره – را شامل میشود. همچنین مانند WinPython، Python Portable بدون نیاز به نصب رسمی روی سیستم ویندوز اجرا میشود و میتواند در هر دایرکتوری یا روی یک درایو قابل حمل قرار گیرد. علاوه بر این، IDE Spyder و مدیر بسته pip پایتون همراه آن ارائه شدهاند، تا بتوانی بستهها را اضافه، تغییر یا حذف کنی.
محدودیتهای Python Portable
بر خلاف WinPython، Python Portable شامل کامپایلر C/C++ نیست. برای استفاده از کدهایی که با Cython نوشته شده و به C کامپایل میشوند، باید خودت یک کامپایلر C فراهم کنی. همچنین جدیدترین نسخه پایتونی که در زمان نگارش این متن ارائه شده، Python 3.9 است.
توزیعهای آزمایشی پایتون
این توزیعها تغییرات قابل توجهی در پایتون ایجاد میکنن – یا به این دلیل که از پایتون به عنوان نقطه شروع برای چیزی کاملا جدید استفاده میکنن، یا به این دلیل که تغییرات استراتژیک در پایتون استاندارد اعمال میکنن. به طور کلی، این نسخههای پایتون هنوز برای استفاده در محیطهای تولیدی توصیه نمیشن.
اگر در آینده نزدیک با یک کدبیس پایتون 2.x کار میکنی، ممکنه بخوای مقاله ما درباره توزیعهای آزمایشی پایتون که پایتون 2.x را زنده نگه میدارن هم مطالعه کنی.
MicroPython
MicroPython یک زیرمجموعه حداقلی از زبان پایتون ارائه میدهد که میتواند روی سختافزارهای بسیار ضعیف، مانند میکروکنترلرها اجرا شود. MicroPython نسخهای از Python 3.4 را با برخی تفاوتها پیادهسازی میکند. اگر پایتون بلد باشی، نوشتن کد با MicroPython آسان است، اما کدهای موجود ممکن است بدون تغییر اجرا نشوند.
RustPython
runtime پیشفرض پایتون که با زبان C نوشته شده، از نظر بسیاری کیفیت بالایی دارد و تعداد خطاهای احتمالی ناشی از ویژگیهای C را به حداقل میرساند. پروژه RustPython یک runtime پایتون را با زبان Rust پیادهسازی میکند و از ویژگیهای امنیت حافظه و سرعت Rust بهره میبرد. در حال حاضر فقط بخشی از سینتکس پایتون را پشتیبانی میکند، اما پیشرفت مداومی دارد. حتی میتوانی یک نسخه آزمایشی زنده آن را در مرورگر امتحان کنی.
نتیجهگیری
پایتون با وجود سادگی و انعطافپذیری، امروز به یکی از محبوبترین زبانهای برنامهنویسی در دنیا تبدیل شده و تنوع نسخهها و توزیعهای آن این امکان را فراهم میکند که برای هر نیاز خاص، انتخاب مناسبی داشته باشیم. CPython به عنوان پیادهسازی مرجع، بیشترین سازگاری و استاندارد را ارائه میدهد و برای اکثر کاربران و پروژهها گزینهای مطمئن است. PyPy با بهینهسازیهای JIT سرعت اجرای برنامهها را به طور چشمگیری افزایش میدهد، در حالی که Jython و IronPython امکان تعامل با اکوسیستمهای Java و .Net را فراهم میکنند.
توزیعهایی مثل Anaconda، ActiveState و WinPython امکانات آماده و بستههای از پیش نصبشده برای کارهای علمی، تحلیل داده و محیطهای سازمانی ارائه میدهند و برای کاربرانی که میخواهند سریع شروع به کار کنند بسیار مناسباند. نسخههای قابل حمل مانند Python Portable یا WinPython Zero امکان استفاده بدون نصب را فراهم میکنند و برای محیطهایی با محدودیت نصب یا چند نسخه پایتون کنار هم ایدهآل هستند.
توزیعهای آزمایشی مثل MicroPython و RustPython، هر کدام با اهداف خاص و تمرکز روی سختافزارهای محدود یا امنیت حافظه، نشاندهنده مسیرهای نوآورانه در توسعه پایتون هستند. در نهایت ابزارهایی مانند Mypy نیز با بررسی نوع دادهها و تایپچک استاتیک به توسعهدهندگان کمک میکنند تا کدهای مطمئنتر و بدون خطای منطقی بنویسند.
به طور کلی، انتخاب نسخه یا توزیع مناسب پایتون بستگی به نیاز پروژه، محیط اجرا، محدودیتهای سختافزاری و هدفهای توسعهدهنده دارد. شناخت تفاوتها و مزایا و محدودیتهای هر گزینه باعث میشود بهترین انتخاب را داشته باشیم و از پتانسیل کامل پایتون بهره ببریم.
دیدگاهتان را بنویسید