قبل از اینکه خروجی
همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار :
۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون بمونه + تاریخ)
۲- بعد از اینکه تغییرات رو اعمال کردید (اسم تغییرات + تاریخ یا
شاید شما ندونید برای چی ذخیره میکنیم ولی ی روزی نجاتتون میده.
برای گرفتن خروجی بالا توی ترمینال این دستور رو اجرا میکنیم با توجه به این نکته که اسکریپت مثال (توی عکس قبلی رو به اسم
cProfile
رو تفسیر کنم میخوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling
رو بگم.همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار :
۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون بمونه + تاریخ)
۲- بعد از اینکه تغییرات رو اعمال کردید (اسم تغییرات + تاریخ یا
git commit
)شاید شما ندونید برای چی ذخیره میکنیم ولی ی روزی نجاتتون میده.
برای گرفتن خروجی بالا توی ترمینال این دستور رو اجرا میکنیم با توجه به این نکته که اسکریپت مثال (توی عکس قبلی رو به اسم
example.py
ذخیره کردیم)python -m cProfile -s cumulative example.py
و درصورتی که بخوایم خروجی رو ذخیره کنیم که برای آنالیزش از snakeviz, pstats
استفاده بشه و مهمتر از همه داکیومنتش کرده باشیم میتونیم از دستور python -m cProfile -s cumulative -o compare_bubble_vs_builtin_sort_$(date +'%Y_%m_%dT%H_%M_%S').prof example.py
استفاده کنیم؛ حتما پسوند رو .prof
بذارید که راحت شناسایی بشه.
🧑💻PythonDev🧑💻
قبل از اینکه خروجی cProfile رو تفسیر کنم میخوام مهمترین نکته توی زندگیتون موقع استفاده از ابزارهای profiling رو بگم. همیشه و تحت همه شرایط؛ خروجی Profiling رو ذخیره کنید اونم ۲ بار : ۱- قبل از اینکه کدی رو تغییر بدید (همیشه هم به اسمی ذخیره کنید که یادتون…
توی دستور بالا :
تفسیر خروجیش هم خیلی سادهتر از اون چیزی هست که فکر میکنید فقط چندتا نکته داره :
وقتی دوتا عدد هست مثل خط اول خروجی توی عکس قبلی
عدد کوچیکتر تعداد فراخوانی غیر بازگشتی یا
مجموع زمان مورد نیاز از لحظه فراخونی اون خط یا تابع تا خروج از اون خط یا تابع + زمان مورد نیاز برای اجرای توایعی که داخل این تابع یا خط فراخوانی شدند + زمان اجرا بصورت
اسم اسکریپت : شماره خطی که اون کد اجرا شده (اسم تابع)
اسم تابع برای شرایطی مهم هست که داخل تابع اصلی توابع دیگری هم فراخوانی بشه
توی خروجی بالا مواردی مثل
همینجا بگم که تصویر قبلی خروجی کامل
-m:
برای استفاده از یک ماژول خاص استفاده میشه-s:
ترتیب نمایش هست که گفتیم بر اساس cumulative time
باشه همیشه هم همین رو استفاده خواهید کرد-o:
برای اینکه خروجی رو توی یک فایل بریزه و توی ترمینال نمایش نده (اول در تاریخ ثبت میکنیم بعد ی بار هم بدون این option
برای راحتی خودمون اجرا میکنیم)تفسیر خروجیش هم خیلی سادهتر از اون چیزی هست که فکر میکنید فقط چندتا نکته داره :
ncalls:
تعداد فراخوانی اون خط از کد (ستون آخر کمی جلوتر توضیح میدم دقیق)وقتی دوتا عدد هست مثل خط اول خروجی توی عکس قبلی
3/1
:عدد کوچیکتر تعداد فراخوانی غیر بازگشتی یا
primitive
هست و عدد بزرگتر تعداد کل فراخوانی به هر شکلی که بوده (بازگشتی و غیر بازگشتی و ...) یعنی بصورت کلی اون builtin method
توی مثال قبل ۳ بار فراخوانی شده.tottime:
مجموع زمان مورد نیاز جهت اجرای اون تایع؛ به غیر از زمان اجرای توابعی که داخل این تابع فراخوانی شدهاند.percall:
زمان اجرای مورد نیاز برای هربار اجرای اون خط یا اون تابع معمولا حدودی برابر هست با :tottime / ncalls
cumtime:
مهمترین ستون همینه و اون مرتب سازی که توی دستور انجام دادیم (منظورم s cumulative-
هست) بر اساس همین ستون بود.مجموع زمان مورد نیاز از لحظه فراخونی اون خط یا تابع تا خروج از اون خط یا تابع + زمان مورد نیاز برای اجرای توایعی که داخل این تابع یا خط فراخوانی شدند + زمان اجرا بصورت
recursive , ...
خلاصه همه چیز اینجاس و از همه ستونها هم دقیقتر هست filename:lineno(function)
اینم که بسیار واضح هست از سمت چپ به راست :اسم اسکریپت : شماره خطی که اون کد اجرا شده (اسم تابع)
اسم تابع برای شرایطی مهم هست که داخل تابع اصلی توابع دیگری هم فراخوانی بشه
توی خروجی بالا مواردی مثل
builtin.exec
(از توابع مورد علاقه من هست اصن ی وضعی) و برخی موارد دیگر برای import random
هست همینجا بگم که تصویر قبلی خروجی کامل
cProfile
نیست و بنده این خروجی رو بریدم تا خواناتر باشهتوی دورههای آموزشی و دانشگاه چیکار میکنند ؟!
چرا همه جوری صحبت میکنند که انگار همین یک دوره، همین یک کتاب یا ... برای کار و کل عمر کفایت میکنه ؟!
نکنید اینکارو، Junior های عزیز بعضی ازین برگذار کنندههای دوره که فقط به فکر سود شخصی هستند شما مراقب باشید سمت این افراد نرید.
نه بخاطر پول، حتی نه بخاطر وقت که دقیقاً تو دنیای الان برنامهنویسی مثل طلا میمونه
بلکه بخاطر اینکه خیلی از شما دوستان اشاره کردید به گرد ناامیدی شدن پستهای کانال براتون
پستهای کانال سطح بالاتری از تازهکار داره، حتی ممکنه یک سنیور رو ببینید که این مطالب رو بلد نیست (اشکالی هم نداره تا حدودی، چون بهش نیازی نداشته شاید)
اولین کاری که میکنید وقتی دوره تموم شد، اینه که برید مصاحبه
مصاحبهها حتی اگر فقط رد بشید، بهتون کلی اطلاعات مهم میده اینکه بازار کار چی میخواد و چه مواردی رو باید بلد باشید
اگر رد نشدید، که بسیار هم عالی شغل پیدا کردید و این شغل یعنی کلی چیز جدید یاد گرفتن (مخصوصاً برای تازهکار)
حتی بعد از اینکه شغل پیدا کردید، باید یاد بگیرید مصاحبه کنید
این حق شما هست که دنبال کار بهتر با مزایای بیشتر باشید حتی اگر ۱ ماه بعد کار بهتری رو پیدا کنید.
مصاحبه دادن و نترسیدن از رد شدن توی مصاحبه، اولین و مهمترین قدم برای پیشرفت و senior شدن هست
مهمتر اینکه :
همیشه بپرسید به چه دلیل رد شدید.
چرا همه جوری صحبت میکنند که انگار همین یک دوره، همین یک کتاب یا ... برای کار و کل عمر کفایت میکنه ؟!
نکنید اینکارو، Junior های عزیز بعضی ازین برگذار کنندههای دوره که فقط به فکر سود شخصی هستند شما مراقب باشید سمت این افراد نرید.
نه بخاطر پول، حتی نه بخاطر وقت که دقیقاً تو دنیای الان برنامهنویسی مثل طلا میمونه
بلکه بخاطر اینکه خیلی از شما دوستان اشاره کردید به گرد ناامیدی شدن پستهای کانال براتون
پستهای کانال سطح بالاتری از تازهکار داره، حتی ممکنه یک سنیور رو ببینید که این مطالب رو بلد نیست (اشکالی هم نداره تا حدودی، چون بهش نیازی نداشته شاید)
اولین کاری که میکنید وقتی دوره تموم شد، اینه که برید مصاحبه
مصاحبهها حتی اگر فقط رد بشید، بهتون کلی اطلاعات مهم میده اینکه بازار کار چی میخواد و چه مواردی رو باید بلد باشید
اگر رد نشدید، که بسیار هم عالی شغل پیدا کردید و این شغل یعنی کلی چیز جدید یاد گرفتن (مخصوصاً برای تازهکار)
حتی بعد از اینکه شغل پیدا کردید، باید یاد بگیرید مصاحبه کنید
این حق شما هست که دنبال کار بهتر با مزایای بیشتر باشید حتی اگر ۱ ماه بعد کار بهتری رو پیدا کنید.
مصاحبه دادن و نترسیدن از رد شدن توی مصاحبه، اولین و مهمترین قدم برای پیشرفت و senior شدن هست
مهمتر اینکه :
همیشه بپرسید به چه دلیل رد شدید.
چون خیلی پرسیده شده :
اگر تازه کار هستید
برای کسی که تازه میخواد پایتون و برنامهنویسی رو شروع کنه کتاب بسیار خوبی هست (من نسخههای قبلی رو به شاگرد هام معرفی میکردم؛ این نسخه هم قطعاً بهتر هست که بدتر نه پس نخونده معرفی میکنم کتاب رو)
اگر تازه کار هستید
Head First Python (3rd edition)
نسخه اولیه رو O'Reilly منتشر کرده (رایگان تو سایتش میتونید بخونید یا از منابع موجود استفاده کنید و دانلود بزنید)برای کسی که تازه میخواد پایتون و برنامهنویسی رو شروع کنه کتاب بسیار خوبی هست (من نسخههای قبلی رو به شاگرد هام معرفی میکردم؛ این نسخه هم قطعاً بهتر هست که بدتر نه پس نخونده معرفی میکنم کتاب رو)
🧑💻PythonDev🧑💻
#django_roadmap #roadmap امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند : ۱- پایتون رو تا سطح خوبی بلد هست ۲- ساختمان داده و الگوریتم رو میشناسه ۳- لینوکس، گیت و داکر رو هم بلده یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین…
یکسری از دوستان اشاره کردند که کتاب جزئیات کمی داره و برای کسی که قبل از این وب کار نکرده خیلی راحت و سر راست نیست :
اگر این شرایط برای شما هم صدق میکند، به این لیست میشه یک کتاب دیگر هم اضافه کرد.
کتاب :
Web Development with Django 2nd edition By Ben Shaw, .... (Packt pub)
خوبی دیگری که این کتاب برای دوستان تازهکار داره این هست که توی هر فصل و بعد از هر مبحث یک تمرین جزئی درمورد آنچه صحبت شد هم ارائه میده
فصلهای دیگری هم که بنظرم بهتر توضیح داده برای شروع :
Media serving and file uploads,
Session and authentication
Testing your django application
و بخشهایی (شامل مثال) از فصل های :
Generating CSV, PDF, and other Binary File
Django Third-Party Libraries
هست.
بازم میگم اگر کتاب دیگری خوندید، درگیر کتابهای مختلف نشید، تمرین کردن و با جستجو رسیدن به آنچه که نیاز دارید اولویت باشه براتون
اما اگر سرفصلی هست که فکر میکنید به خوبی متوجه نشدید یا ضعف دارید فقط همون فصل رو از کتاب، دوره یا منبع دیگری دنبال کنید.
بعنوان مثال، فرقی نمیکنه چه کتابی باشه؛ وقتی شما نحوه ساخت پروژه یا راهاندازی اپ توی جنگو رو بلدید دیگه لازم نیست سراغ هر کتابی میرید فصل اول و دوم رو بخونید.
حالا اینجا مثال
Django
بود شما به موضوعات دیگر و ... هم تعمیم بدید این موضوع رو.
اولویت اول شما باید کد زدن و تمرین باشه، شخصاً کل هفته رو کد میزنم
آخر هفته که روز استراحتم هست، ترجیح میدم کتاب بخونم تا مطالب و تکنیکهای جدید رو توی کارهام پیاده سازی کنم (و همین ۱ روز برای خیلی از مباحث و کتابها بیشتر از کافی هست).
اگر این شرایط برای شما هم صدق میکند، به این لیست میشه یک کتاب دیگر هم اضافه کرد.
کتاب :
Web Development with Django 2nd edition By Ben Shaw, .... (Packt pub)
خوبی دیگری که این کتاب برای دوستان تازهکار داره این هست که توی هر فصل و بعد از هر مبحث یک تمرین جزئی درمورد آنچه صحبت شد هم ارائه میده
فصلهای دیگری هم که بنظرم بهتر توضیح داده برای شروع :
Media serving and file uploads,
Session and authentication
Testing your django application
و بخشهایی (شامل مثال) از فصل های :
Generating CSV, PDF, and other Binary File
Django Third-Party Libraries
هست.
بازم میگم اگر کتاب دیگری خوندید، درگیر کتابهای مختلف نشید، تمرین کردن و با جستجو رسیدن به آنچه که نیاز دارید اولویت باشه براتون
اما اگر سرفصلی هست که فکر میکنید به خوبی متوجه نشدید یا ضعف دارید فقط همون فصل رو از کتاب، دوره یا منبع دیگری دنبال کنید.
بعنوان مثال، فرقی نمیکنه چه کتابی باشه؛ وقتی شما نحوه ساخت پروژه یا راهاندازی اپ توی جنگو رو بلدید دیگه لازم نیست سراغ هر کتابی میرید فصل اول و دوم رو بخونید.
حالا اینجا مثال
Django
بود شما به موضوعات دیگر و ... هم تعمیم بدید این موضوع رو.
اولویت اول شما باید کد زدن و تمرین باشه، شخصاً کل هفته رو کد میزنم
آخر هفته که روز استراحتم هست، ترجیح میدم کتاب بخونم تا مطالب و تکنیکهای جدید رو توی کارهام پیاده سازی کنم (و همین ۱ روز برای خیلی از مباحث و کتابها بیشتر از کافی هست).
اگه تو صفحههای وب نیاز داشتید یک قسمت کد برنامهنویسی نمایش بدید (مثل مطلب آموزشی در وبلاگ، مستندات فنی مرتبط با برنامهنویسی و...)، با استفاده از Prism میتونید نمایش بلاک کد رو زیباتر و کاربردیتر کنید.
https://prismjs.com
از سینتکس زبانهای مختلفی هم پشتیبانی میکنه و چندتا تم و کلی پلاگین داره که براساس انتخاب اونها css و js نهایی رو برای استفاده در اختیار شما قرار میده.
https://prismjs.com/#plugins
https://prismjs.com
از سینتکس زبانهای مختلفی هم پشتیبانی میکنه و چندتا تم و کلی پلاگین داره که براساس انتخاب اونها css و js نهایی رو برای استفاده در اختیار شما قرار میده.
https://prismjs.com/#plugins
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد
ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
EAFP
امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت.ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
tensorflow 0.7
اومده بود قشنگ یادم هست ازین چالشها زیاد داشتیم)توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
raise CustomException('Finally we raise our custom error in framework.')
from None
همین from None
باعث میشه exception
های قبلی چاپ نشه.پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
🧑💻PythonDev🧑💻
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد EAFP امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت. ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که tensorflow 0.7 اومده…
مثال بالا در صورت وجود
from None
یه ترفند ساده و بکند طور
دانلود فایل از لپتاپ خودتون با گوشی
چیزی که لازم دارید پایتون و مودم وایفای هست.
https://github.com/zamaniamin/Python/wiki/Download-Files-From-Your-Computer-By-Your-Phone
دانلود فایل از لپتاپ خودتون با گوشی
چیزی که لازم دارید پایتون و مودم وایفای هست.
https://github.com/zamaniamin/Python/wiki/Download-Files-From-Your-Computer-By-Your-Phone
GitHub
Download Files From Your Computer By Your Phone
Here is a small and summarized training repository of Python and technologies related to Python, like FastAPI, Pytest, Django or even pip commands. - zamaniamin/Python
تو این دو روز زیاد پست اموزشی نگذاشتم و برنامه دارم که برای دوستان عزیز که با زبان برنامه نویسی پایتون کار می کنند و میخوان یه درجه ای از مهارت های بالا در برنامه نویسی برسن سعی بر این دارم که یه منبع کامل از کتاب خانه ها و رفرنس های زبان پایتون به طور کامل و جامع ارائه بدم که سطح عملی خودتون رو بالا ببرید .💻
🧑💻PythonDev🧑💻
دستاورد جدید آنلاک کردم پروژه دارم اوبنتو آپدیت شده (میزان لگ سیستم به خدا رسیده) ممکنه مشکل از انویدیا هم باشه (ولی درست کار میکنه) دمو هم دارم گوگل هم 403 بهم میده (بدون ویپیان) مشکل ۴۰۳ پا برجا نیست (۲۰۰-۳۰۰ تا ویپیان داره برنامهنویس ایرانی) بطور…
قبل اینکه
Kernel
تغییر بدید، یا درایورها رو دستکاری کنید و ...
Bios Update
بزنید، مخصوصاً اگر سختافزار جدید اضافه کردید.
۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره
و روی نرمافزارها هم فعلاً جدیترین مشکل خودم
smplayer
هست که lag بسیار داره.
پ.ن : توی بررسی لاگهای
احتمال ۹۹٪ دوستانی که هوش مصنوعی کار نمیکنند، به این مشکلات نخواهند خورد
Kernel
تغییر بدید، یا درایورها رو دستکاری کنید و ...
Bios Update
بزنید، مخصوصاً اگر سختافزار جدید اضافه کردید.
۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره
و روی نرمافزارها هم فعلاً جدیترین مشکل خودم
smplayer
هست که lag بسیار داره.
پ.ن : توی بررسی لاگهای
nvidia
متوجه شدم بخشی از مشکلات از نصب cuda
میاد. بعضی تنظیمات رو خودش کنترل میکنه که نمیشه سختافزار رو مناسب کارهای روزانه optimize
کرد (ولی این مورد هم اون ۱۰٪ مشکل من رو حل نمیکنه چون ازینجا نیست)احتمال ۹۹٪ دوستانی که هوش مصنوعی کار نمیکنند، به این مشکلات نخواهند خورد
🧑💻PythonDev🧑💻
قبل اینکه Kernel تغییر بدید، یا درایورها رو دستکاری کنید و ... Bios Update بزنید، مخصوصاً اگر سختافزار جدید اضافه کردید. ۹۰٪ مشکل حل شد، هنوز بعضی مشکلات وجود داره و روی نرمافزارها هم فعلاً جدیترین مشکل خودم smplayer هست که lag بسیار داره. پ.ن…
۱۰٪ آخر هم یافت شد؛ nvidia یک موردی رو معرفی کرد به اسم
Nvidia GPU stats tool
توی status bar وضعیت دما و ... GPU هارو بهتون میگه، روی سیستم با ۱ کارت گرافیک احتمالاً مشکلات کمتری داره.
اما وقتی داشتم آنالیز میکردم، دیدم GPU اصلی سیستم، سریعا پاسخ میده و GPU دوم که تقریباً ideal و ضعیفتر هست latency بالاتری داره و همین باعث lag روی سیستم میشده
بخصوص موقع پخش video با smplayer چون من hardware decode رو فعال داشتم.
اوضاع بدتر هم میشد، چون من فاصله بین گرفتن وضعیت gpu هارو هم خیلی کم گذاشته بودم.
خلاصه، اینکه حال نداشتم بزنم
پ.ن : قبلاً این مشکل رو با
Nvidia GPU stats tool
توی status bar وضعیت دما و ... GPU هارو بهتون میگه، روی سیستم با ۱ کارت گرافیک احتمالاً مشکلات کمتری داره.
اما وقتی داشتم آنالیز میکردم، دیدم GPU اصلی سیستم، سریعا پاسخ میده و GPU دوم که تقریباً ideal و ضعیفتر هست latency بالاتری داره و همین باعث lag روی سیستم میشده
بخصوص موقع پخش video با smplayer چون من hardware decode رو فعال داشتم.
اوضاع بدتر هم میشد، چون من فاصله بین گرفتن وضعیت gpu هارو هم خیلی کم گذاشته بودم.
خلاصه، اینکه حال نداشتم بزنم
watch -n 1 nvidia-smi
باعث بدتر شدن اوضاع شده بود؛ اینکه Bios کمک کرد هم احتمال میدم بخاطر این بود که progress bar و کم کردن بافر و ... بود (ولی چون قبل از آپدیت بایوس این اطلاعات رو نگرفته بودم نمیتونم مطمئن بگم)پ.ن : قبلاً این مشکل رو با
System Monitor
داشتم که یک gnome extension بود (متأسفانه خیلی دیر یادم افتاد که میتونه ازین موضوع باشه)اینم اولین چالش برای دوستان بالا خروجی کد بالا ؟؟
Anonymous Quiz
38%
True,false
8%
True,True
46%
False,True
8%
False,False
سوال: best practiceها و ابزارات مورد نیاز برای توسعه یه بسته، لایبرری یا نرمافزار پایتونی چیه؟
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
همچنین
1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
اگر عادت دارید کدهای خودتون رو
1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
https://m.youtube.com/watch?v=FxSsnHeWQBY
https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
وبسایت pre commit:
https://pre-commit.com/
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
Poetry
استفاده کنید، چون ابزار بسیار قدرتمندی هست، کار باهاش بسیار راحته (خیلی شبیه به Cargo
در زبان Rust
هست)، کامیونیتی بزرگی داره، به راحتی محیط dev
و prod
رو میتونید مدیریت کنید، مستندات بسیار خوب و روانی داره، در سریع ترین زمان ممکن میتونید پروژه رو در PyPI
منتشر کنید و همچنین پروژههای معروفی از جمله Rich (کتابخونهای که خود pip
هم ازش برای رنگی کردن progress bar
ها استفاده میکنه) از اون استفاده میکنن، که همین نشون میده چقدر کاربردی هست.همچنین
build
و run
هم توسط Poetry
انجام میشه-
منابع آموزشی:1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
Linting
ابزارهای flake8
و pylint
از معروف ترینها هستن، هر یک رو میتونید شدت سخت گیریشون رو تنظیم کنید، به راحتی همراه با Poetry
تنظیماتشون در یک فایل قرار میگیره و نیاز به نگه داشتن فایلهای متفاوت برای هر کدوم ندارید. به نظرم خود flake8
به تنهایی نیازتون رو برطرف میکنه. اگر از PyCharm
استفاده کنید یک Linter
به صورت Built-in
در اختیارتون میذاره که خوبه و کارتون رو راه میندازه.اگر عادت دارید کدهای خودتون رو
Annotate
کنید و زیاد از Type Hint
ها استفاده میکنید، استفاده از MyPy
به عنوان یک static type checker
به شما کمک میکنه ایرادات موجود در کلاس ها، توابع و ... رو پیدا کنید و بتونید type
های دقیق تری استفاده کنید. همچنین ابزار Pyright
که توسط مایکروسافت توسعه داده میشه، در VSCode
به صورت integrated
با افزونه Pylance
کار میکنه و اگر از VSCode
استفاده میکنید پیشنهاد میکنم حتما افزونه Pylance
رو نصب کنید. PyCharm
هم یک Type Checker
داره ولی هنوز توانمندی Pylance
و MyPy
رو نداره.-
منابع آموزشی:1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
organize
کردن import
ها از isort
استفاده کنید، هم به صورت CLI
در دسترس هست و هم یک API
داره که میتونید در کد پایتون استفاده کنید. یک code formatter
بسیار معروف که در اکثر پروژهها استفاده میشه Black
هست، زیر نظر PSF
(یا Python Software Foundation
) و برنامه نویسای با تجربه و کار کشته ای همچون آقای Łukasz Langa
(ریلیس منیجر پایتون 3.9) توسعه داده میشه، با دیگر ابزار ها مثل isort
سازگار هست، با PEP8
سازگاره و کلی قابلیت مزیت دیگه داره که حقیقتا اینجا جا نمیشن :)-
منابع آموزشی:1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
Pytest
و unittest
(در stdlib
موجود هست) در تست نویسی پروژه ها استفاده میشن، برای تست کردن پروژه در environment
های متفاوت از ابزار tox
استفاده میشه و باهاش میتونید در نسخه های متفاوتی از پایتون کدتون رو تست کنید.-
منابع آموزشی:1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
-
آقای ned batchelder:https://m.youtube.com/watch?v=FxSsnHeWQBY
-
آقای Corey Schafer:https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
Git
در پروژه خودتون استفاده میکنید، پیشنهاد میکنم از pre-commit
حتما استفاده کنید و تمام این ابزارهای گفته شده رو automate
کنید تا در هربار commit
کردن، قبل از اینکه commit
انجام بشه، این ابزارها روی کدتون اجرا بشن و اگر اشکالی در کدتون وجود داره پیدا بشه و اون رو برطرف کنید و دوباره commit کنید.وبسایت pre commit:
https://pre-commit.com/
GitHub
GitHub - Textualize/rich: Rich is a Python library for rich text and beautiful formatting in the terminal.
Rich is a Python library for rich text and beautiful formatting in the terminal. - Textualize/rich