۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

۴ چک کننده نوع پایتون برای تمیز نگه داشتن کد شما

Mypy، Pytype، Pyright و Pyre می‌توانند به شما کمک کنند کدهای Python خود را بدون اشکال نگه دارید. بیایید ببینیم هر یک از این ابزارهای مفید چه چیزی را ارائه می دهند.

Mypy، Pytype، Pyright و Pyre می‌توانند به شما کمک کنند کدهای Python خود را بدون اشکال نگه دارید. بیایید ببینیم هر یک از این ابزارهای مفید چه چیزی را ارائه می دهند.

در ابتدا، Python هیچ گونه تزئینی نداشت. این با هدف کلی برای کار کردن سریع و آسان زبان مطابقت داشت. انواع شی‌های انعطاف‌پذیر پیچش‌ها و چرخش‌های نوشتن کد را در خود جای می‌دهند و به توسعه‌دهندگان کمک می‌کنند تا کد خود را مختصر نگه دارند.

در چند سال گذشته، پایتون پشتیبانی از حاشیه نویسی تایپ را اضافه کرده است، که الهام بخش یک فرهنگ کامل از نرم افزار اختصاص داده شده به بررسی تایپ پایتون در طول توسعه است. پایتون در زمان اجرا انواع را بررسی نمی‌کند – حداقل هنوز نه. اما با استفاده از یک جستجوگر نوع خوب، سوار بر تفنگ ساچمه ای در IDE انتخابی خود، می توانید از حاشیه نویسی های نوع پایتون برای بررسی بسیاری از اشتباهات رایج قبل از شروع تولید استفاده کنید.< /p>

این مقاله به چهار مورد از افزونه‌های اصلی چک کردن پایتون می‌پردازد. همه تقریباً از یک الگو پیروی می کنند، کد پایتون را با حاشیه نویسی اسکن می کنند و بازخورد ارائه می دهند. اما هر کدام افزودنی های مفید خود را به مفهوم اصلی ارائه می دهند.

Mypy

Mypy، که در ابتدا در Dropbox برای بهینه‌سازی پایگاه کد داخلی خود توسعه داده شد، احتمالاً اولین سیستم بررسی نوع استاتیک بود. برای پایتون کار روی آن در سال ۲۰۱۲ آغاز شد و هنوز در حال توسعه فعال است. این اساساً نمونه اولیه نحوه کار کتابخانه های بررسی نوع شخص ثالث در پایتون است، حتی اگر بسیاری دیگر از آن زمان آمده اند و ویژگی های آن را گسترش داده اند.

Mypy می‌تواند به‌صورت مستقل یا از طریق خط فرمان اجرا شود، یا می‌تواند به عنوان بخشی از یک ویرایشگر یا یکپارچه‌سازی لاینتر IDE کار کند. بسیاری از ویرایشگرها و IDE ها Mypy را ادغام می کنند. پسوند پایتون ویژوال استودیو کد می تواند مستقیماً با آن کار کند. هنگام اجرا، Mypy بر اساس نوع اطلاعاتی که ارائه می‌کند، گزارش‌هایی درباره سازگاری کد شما تولید می‌کند.

اگر کد شما حاوی یادداشت‌های نوع نباشد، Mypy اکثر بررسی‌های کد خود را انجام نمی‌دهد. به این ترتیب، اگر به تدریج یک پایه کد را حاشیه نویسی می کنید، Myp زمان خود یا شما را روی کدی که در واقع سعی در بررسی تایپ آن ندارید تلف نمی کند.

Microsoft Dev Box: ایستگاه کاری توسعه شما در Azure

اما می‌توانید از Mypy برای پرچم‌گذاری دستی کد بدون حاشیه‌نویسی استفاده کنید. این کار را می توان با درجات مختلفی از سختگیری بسته به نیاز فرد انجام داد.

اگر از ابتدا با یک کد پایه شروع می‌کنید و می‌خواهید یک استراتژی پرده‌سازی پیشگیرانه تهاجمی داشته باشید، می‌توانید از گزینه --strict برای جلوگیری از هرگونه کد تایپ نشده استفاده کنید. از سوی دیگر، اگر با یک پایگاه کد قدیمی کار می‌کنید که تعاریف نوع زیادی ندارد، می‌توانید از گزینه‌های راحت‌تری مانند جلوگیری از تعاریف عملکردهای تایپ نشده با --disallow-untyped-defs در حالی که سایر کدهای تایپ نشده مجاز هستند. و همیشه می‌توانید از نظرات درون خطی مانند # type: ignore استفاده کنید تا خطوط جداگانه پرچم‌گذاری نشود.

Mypy می‌تواند هنگام استفاده از فایل‌های خرد PEP 484 استفاده کند. نکات را برای رابط های عمومی یک ماژول تایپ کنید. علاوه بر این، Mypy stubgen را ارائه می‌کند، ابزاری که به‌طور خودکار فایل‌های خرد را از کدهای موجود تولید می‌کند. برای کدهای تایپ نشده، فایل‌های خرد از انواع عمومی استفاده می‌کنند که می‌توانید در صورت نیاز علامت‌گذاری کنید.

Mypy همچنین دارای ابزاری به نام mypyc است که Python تزئین شده را در یک C کامپایل می‌کند. ماژول. این می تواند پایه های کد تزئین شده را سرعت بخشد، بنابراین می توان آن را راهی آزمایشی برای تبدیل Python به زبانی سریعتر با حاشیه نویسی نوع در نظر گرفت. با این حال، نمی‌تواند به اندازه Cython سرعت کار را افزایش دهد، زیرا mypyc اجازه حاشیه‌نویسی را برای انواع بومی ماشین نمی‌دهد. از سوی دیگر، نحو سفارشی Cython به این معنی است که اکثر لینترها (مانند موارد ذکر شده در اینجا) نمی توانند با آن کار کنند.

Pytype

Pytype، ایجاد شده توسط Google، با استفاده از استنتاج به‌جای تایپ کردن، با مواردی مانند Mypy تفاوت دارد. توصیف کننده ها به عبارت دیگر، Pytype به جای اتکا به حاشیه‌نویسی‌های نوع، سعی می‌کند انواع را با تجزیه و تحلیل جریان کد تعیین کند.

Pytype هر زمان که انجام این کار منطقی باشد در کنار ملایمت اشتباه می کند. اگر عملیاتی دارید که در زمان اجرا کار می کند و با هیچ حاشیه نویسی در تضاد نیست، Pytype در مورد آن صحبتی نمی کند. با این حال، این بدان معناست که برخی از مشکلاتی که باید پرچم‌گذاری شوند (مثلاً اعلام کردن یک متغیر با یک نوع در یک نقطه و سپس تعریف مجدد آن در زمینه مشابه) بدون اعلام قبلی عبور می‌کنند. مستندات بیان می‌کنند که چنین مواردی در آینده غیرمجاز خواهند بود.

اگر انتخاب می‌کنید که یادداشت‌های نوع را به کد خود اضافه کنید، تابع reveal_type Pytype بسیار مفید است. اگر عبارتی را در کد خود وارد کنید که reveal_type(expr) را می خواند، Pytype expr را ارزیابی می کند و هشداری را منتشر می کند که نوع آن را توصیف می کند.

توجه داشته باشید که برخی از رفتارهای Pytype با افزودن ویژگی‌ها به خود کد کنترل می‌شوند. برای مثال، اگر می‌خواهید پای تایپ را از شکایت در مورد ویژگی‌های گمشده یا اعضای ماژول که به صورت پویا تنظیم شده‌اند را متوقف کنید، باید ویژگی _HAS_DYNAMIC_ATTRIBUTES = True را به کلاس یا ماژول مورد نظر اضافه کنید، برخلاف تنظیمات. نوعی ابرداده پیکربندی Pytype.

Pyright/Pylance

Pyright جستجوگر نوع Python مایکروسافت است که به عنوان بخشی از Pylance برای کد ویژوال استودیو. اگر قبلاً کاربر VS Code هستید، افزونه Pylance راحت‌ترین راه برای کار با Pyright است. فقط نصبش کن و برو Pyright با بسیاری از امکانات و پیشرفت‌های مشابه با ابزارهای تجزیه و تحلیل Python، یک تجربه همه‌جانبه و همه‌جانبه بررسی نوع و کدنویسی را فراهم می‌کند.

مانند Pytype، Pyright می‌تواند با پایگاه‌های کدی که هیچ نوع اطلاعاتی ندارند کار کند. در این موارد، Pyright تمام تلاش خود را می کند تا بفهمد چه نوع هایی در بازی هستند. بنابراین شما هنوز هم می توانید نتایج خوبی با Pytype در پایگاه های کد قدیمی بدون اعلان نوع بدست آورید. اما با افزودن تدریجی یادداشت‌های نوع به کد خود، در طول زمان نتایج بهتری دریافت خواهید کرد.

Pyright بسیار انعطاف پذیر است به روش هایی که طرح های پروژه های Python دنیای واقعی را تکمیل می کند. مانند سایر بررسی‌کننده‌های نوع، Pyright را می‌توان پیکربندی کرد بر اساس -پایه پروژه با یک فایل پیکربندی با فرمت JSON در دایرکتوری پروژه، یا به عنوان بخشی از فایل pyproject.toml در بخشی به نام [tool.pyright] . مسیرهای فردی را می توان در فایل پیکربندی حذف کرد (هرگز بررسی نشد) یا نادیده گرفت (خطاها و اخطارها حذف شدند).

در VS Code، فضاهای کاری با چندین ریشه هر کدام می توانند پیکربندی Pyright خود را داشته باشند. این در صورتی است که بخش‌های مختلف پروژه به پیکربندی‌های پرده‌بندی متفاوتی نیاز دارند. در همین راستا، می‌توانید «محیط‌های اجرایی» متعددی را در یک پروژه تعریف کنید که هر کدام مسیرهای venv یا import خاص خود را دارند. این باعث می‌شود Pyright به راحتی دانه‌دارترین در میان لنگرهای نمایه شده در اینجا باشد.

Pyre 

ایجاد شده توسط توسعه دهندگان در فیس بوک و اینستاگرام، Pyre در واقع دو ابزار در یکی است: جستجوگر نوع (Pyre ) و یک ابزار تحلیل کد ایستا (Pysa). این دو به گونه‌ای طراحی شده‌اند که دست در دست هم کار کنند تا سطح بالاتری از بررسی و تجزیه و تحلیل را نسبت به سایر ابزارها ارائه دهند، اگرچه کاربر برای استفاده کامل از آنها باید کمی سنگین‌تر را انجام دهد.

Pyre رویکردی مشابه Pytype و Mypy دارد. کدهای تایپ نشده با ملایمت بیشتری نسبت به کدهای تایپ شده مدیریت می شوند، بنابراین می توانید با یک پایگاه کد پایتون تایپ نشده شروع کنید و تابع حاشیه نویسی را بر اساس تابع و ماژول به ماژول اضافه کنید. “حالت سخت” را در یک ماژول تغییر دهید، و Pyre هرگونه حاشیه نویسی گم شده را علامت گذاری می کند. یا می‌توانید حالت سخت را پیش‌فرض قرار دهید و در سطح ماژول انصراف دهید. Pyre همچنین با فایل های خرد با قالب .pyi کار می کند.

Pyre یک ویژگی قدرتمند برای انتقال پایگاه های کد به یک قالب تایپ شده دارد. گزینه خط فرمان infer یک فایل یا دایرکتوری را جذب می کند، در مورد انواع استفاده شده حدس می زند و حاشیه نویسی ها را روی فایل ها اعمال می کند. با این حال، ابتدا می خواهید از کد خود نسخه پشتیبان تهیه کنید! (اگر می خواهید اطلاعات نوع را از یک برنامه در حال اجرا پایتون به دست آورید، می توانید این کار را با پروژه فیس بوک/اینستاگرام دیگر، MonkeyType.)

در حالی که ویژگی‌های Pyre مشابه بسته‌های دیگر است که در اینجا توضیح داده شده است، Pysa منحصر به فرد است. Pysa با تکیه بر کتابخانه ای از تجزیه و تحلیل جریان برای اجزای خاص نرم افزار و پرچم گذاری کدهایی که به نظر آسیب پذیر هستند، «تحلیل لکه دار» را روی کد برای شناسایی مسائل امنیتی بالقوه انجام می دهد. هر چیزی که توسط آن کد لمس شود نیز به‌عنوان آلوده پرچم‌گذاری می‌شود، اگرچه می‌توانید مؤلفه‌هایی را مشخص کنید که داده‌ها را پاکسازی می‌کنند و آن داده‌ها را از نمودار لکه‌دار حذف می‌کنند.

یک اشکال این است که کتابخانه Pysa از تحلیل‌های لکه‌دار اجزای شخص ثالث< /a> خیلی بزرگ نیست، بنابراین ممکن است لازم باشد مدل خود را طراحی کنید. اما بسیاری از تجزیه و تحلیل‌های لکه‌دار برای نرم‌افزارهایی هستند که به طور گسترده مورد استفاده قرار می‌گیرند، مانند چارچوب وب جنگو، SQL Alchemy ORM، و کتابخانه علم داده‌های Pandas، بدون ذکر تجزیه و تحلیل برای مشکلات رایج سیستم فایل.