کامپایل کردن پایتون ۳.۱۰ از سورس کد

این روزها واقعا حالت جالبی برام داره سه‌تا از زبون‌های مورد علاقه‌ام یا تازه ورژن جدید شون رلیز شده یا به زودی رلیز میشن و هر کدومشون یا تغییرات نسبتا بزرگی دادن یا قراره توی ورژنی که میاد تغییرات جالبی ایجاد کنندزبان GO قرار اول فوریه آینده ورژن ۱.۱۸ رو بده و توش جنریک‌ها رو اضافه کنه، C# هم توی ورژن ۱۰ ش قراره ویژگی‌های جالب جدیدی از async رو اضافه کنه مثل async method builder چند روز پیش‌ هم پایتون ۳.۱۰ منتشر شده، که متاسفانه یا خوشبختانه اوبونتو هنوز حتی ورژن ۳.۹ رو دیفالت توی پکیج‌های خودش نذاشته.بخاطر همین تصمیم گرفتم هم سوس کد پایتون رو برای خودم کامپایل کنم هم اینکه به این بهانه یکم درباره سورس کد زبان پایتون اینجا بنویسمپیش نوشت:من خوشم میاد از این کارا، نشستم دستی کامپایلش کردم شما میتونید بدون دردسر از apt و یا ویندوز اینستالر استفاده کنیدبا apt:sudo apt install software-properties-common -y sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt install python3.10حالا بریم سراغ کامپایل کردنش:مواد لازم برای این کار مسلما داشتن gcc و make و دسترسی به ترمیناله که من خودم از WSL2 ویندوز استفاده میکنمخب بریم سر اصل مطلب، اول اینو بگم که پایتون ایمپلمنتیشن‌های مختلفی داره مثل pypy و IronPython.net و هر کدوم، سورس کد پایتون رو تغییرات اساسی دادن که باعث زیاد شدن سرعت اجرا و یا کامپتیبل شدنش با مایکروسافت Common runtime language یا چیزای دیگه می‌شه و خب کامپایل کردنشون داستانی کاملا جداست.حالا ما میخوایم CPython که ایمپلمنتیشن اصلی پایتونه رو یه نگاهی بش بندازیماول دایرکتوری‌ که میخوایم توش کارامون رو بکنیم بسازیمmkdir python_source && cd python_sourceلیست دیپندنسی‌ها و لایبرری‌های مورد نیاز پایتون رو نصب میکنیم:sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-devکه تقریبا همشون لایبرری‌های نسبتا معروفی هستن مثل sqlite3, build-essential, libssl, و بقیهفایل سورس کد هم که روی سایت پایتون هست و کلا ۲۴ مگهwget https://www.python.org/ftp/python/3.10.0/Python-3.10.0b4.tgzبا tar بازش میکنیم و میریم ببینیم چیا توشه؟tar -xf Python-3.10.0b4.tgz cd Python-3.10.0 ls فایل config خیلی چیز جالبه و کار رو به شدددددت راحت میکنه،‌ و میاد برای شما محتویات makefile.pre رو بسته به سیستم شما عوض میکنه. دیگه حتی نیازی نیست داکیومنت‌ها رو بخونیم یا سورس کد رو تو گیت‌هاب زیر و رو کنیم. هر چند این فایل خودکار تولید شده و حدود ۲۰هزار خطه، اما بخش‌هاش کاملا مشخصند و اگه یکم bash script بلد باشید و قبلا پروژه‌های متن باز رو کامپایل کرده باشید راحت می‌تونید چیزایی که می‌خواید رو پیدا کنید. میدونیم که عموما این پروژه‌های متن باز توی فایل کانفیگشون، به بخش optimization دارن که makefile یا makefile.pre رو برای سیستم شما عوض میکنهحالا که دستور مد نظر رو پیدا کردیم اجراش میکنیم./configure --enable-optimizationsلیست بلند بالایی از متغییرهای مختلف خواهید دید که بر مبنای سیستم شما، تنظیم میشن. و یه چند ثانیه شایدم چند دقیقه کوتاه طول میکشه یه چیزی مثل تصویر پایینتموم که شد وقت make کردن میشه، که احتمالا برای WSL باید خود پکیجش رو نصب کنیدsudo apt install make -yکامند make یه flag داره به اسم -j یا jobs که میتونید بگید چندتا از پروسسور‌ها رو استفاده کنه که خب من برای اینکه کارم سریع‌تر راه بیوفته میزنم رو ۸ تا. شما میتونی بگی پردازنده های بیشتری رو استفاده کنه یا کمترmake -j 8خود make میره makefile رو بر اساس Makefile.pre تولید میکنه براتون. وقتی میک فایل رو باز می‌کنید اولش یه همچین کامنتی میبینید که کامندهای بدرد بخور رو براتون نوشتهکامندهای make test , make install اصلی‌ها هستن ولی نوشته make altinstall پایتون جدید رو با قبلیه جایگزین نمی‌کنه ولی make install اینکارو میکنه به همین دلیل من اینجا altinstall میکنم make altinstallمعمولا برای اینکه ببینید نرم افزار درست کامپایل شده یا نه باید یه بار ترمینال رو ببندید دوباره باز کنید برای چک کردن اینکه نصب تموم شده یا نهpython3.10 --version حالا که کامپایل تموم شده بیاید یه نگاهی به خود سورس کد پایتون بندازیم توی دایرکتوری‌ای که حاصل فایل فشرده بود چندتا دایرکتوری دیگه هست که بعضیاش رو میخوام توصیه کنم حتما نگاه کنید واقعا آموزنده هستش و اینو به آدم میفهمونه که وقتی خیلی راحت خفن ترین کارهای دنیای برنامه نویسی رو با ۴ خط کد انجام میدیم، توی اون زیرزمین تنگ و تاریکی کدها که هیچ کس نمی‌خواد ببینتش چقدز نبوغ مهندسی خرج شده.دایرکتوری Lib تمام لایبرری‌های استاندارد رو شامل میشه که شدیدا توصیه میکنم حداقل لایبرری‌های http, crypt, asyncio,ssl رو بخونید و ببینید چقدر نبوغ مهندسی برای پایتون خرج شدهدایرکتوری Python هم شامل سورس کد لایبرری‌های هسته پایتونه که واقعا کدهای جالبی توش هستمن هنوز تو مدیریت خطاها بعضی وقت‌ها شیش میزنم فایل errors.c خیلی برام باحال بوددایرکتوری Objects هم سورس آبجکت‌های built-in پایتون به زبان C هستن و انقدر دقیق و کامل کامت گذاری شدن که انگار دارید کتاب میخونید نه کد.