2. راهاندازی محیط توسعه
2.1. پایتون ۳.۸.۱
مثالهای این سند با مفسر پایتون ۳.۸.۱ که در URL |https://www.python.org/downloads/| (فوریهٔ ۲۰۲۰) در دسترس است، بر روی یک سیستم ویندوز ۱۰ آزمایش شدهاند:

نصب پایتون ساختار دایرکتوری [1] و آیتم منوی [2] را در لیست برنامهها ایجاد میکند:

- [3-4]: دو تفسیرگر تعاملی پایتون؛
- [5]: مستندات پایتون؛
- [6]: مستندات ماژول پایتون؛
ما از تفسیرگر تعاملی پایتون استفاده نخواهیم کرد. صرفاً شایان ذکر است که اسکریپتهای این سند را میتوان با استفاده از این تفسیرگر اجرا کرد. اگرچه برای آزمایش نحوه عملکرد یک ویژگی پایتون مفید است، اما برای اسکریپتهایی که قرار است دوباره استفاده شوند، چندان مناسب نیست. در اینجا مثالی با استفاده از گزینه [4] که در بالا ذکر شد، آورده شده است:

پرامپت >>> به شما امکان میدهد یک عبارت پایتون وارد کنید که بلافاصله اجرا میشود. کد تایپشده در بالا معنای زیر را دارد:
خطوط:
- ۱: مقداردهی اولیه یک متغیر. در پایتون، متغیرها با نوع اعلام نمیشوند. آنها به طور خودکار نوع مقداری را که به آنها اختصاص داده میشود، به ارث میبرند. این نوع ممکن است در طول زمان تغییر کند؛
- ۲: نمایش نام. 'nom=%s' یک قالب نمایش است که در آن %s یک پارامتر رسمی است که نشاندهنده یک رشته است. nom پارامتر واقعی است که به جای %s نمایش داده میشود؛
- ۳: نتیجهٔ نمایش؛
- ۴: نمایش نوع متغیر
name؛ - ۵: متغیر «nom» در اینجا از نوع class است. با پایتون ۲.۷، مقدار آن <type 'str'> خواهد بود؛
اکنون، یک کنسول ویندوز را باز کنید:

اینکه ما توانستیم [python] و [1] را تایپ کنیم و فایل اجرایی [python.exe] پیدا شد، نشان میدهد که این فایل در دایرکتوری PATH روی سیستم ویندوز قرار دارد. این موضوع مهم است زیرا به این معنی است که ابزارهای توسعه پایتون قادر خواهند بود مفسر پایتون را پیدا کنند. میتوانید این را به شرح زیر بررسی کنید:

- در [2]، از تفسیرگر پایتون خارج شوید؛
- در [3]، این فرمان فهرست PATH فایلهای اجرایی ماشین ویندوز را نمایش میدهد؛
- در [4]، میتوانیم ببینیم که پوشه تفسیرگر پایتون ۳.۸ بخشی از PATH است؛
2.2. جامعه IDE PyCharm
2.2.1. مقدمه
برای ساخت و اجرای اسکریپتهای این سند، از ویرایشگر نسخه Community Edition [PyCharm] استفاده کردیم که (فوریه ۲۰۲۰) در URL |https://www.jetbrains.com/fr-fr/pycharm/download/# در دسترس است.بخش=ویندوز| :

نسخههای Community ای دییشن IDE، PyCharm و [1-3] را دانلود و نصب کنید.
بیایید IDE و PyCharm را راهاندازی کنیم و سپس اولین پروژه پایتون خود را ایجاد کنیم:


- در [2-4]، یک پروژه جدید ایجاد کنید؛
IDE و PyCharm پروژهٔ ایجادشده را در قالب زیر نشان میدهند:

- در [2-3]، بیایید ویژگیهای IDE را بررسی کنیم؛

- به [4]، تفسیرگر پایتون مورد استفاده برای پروژه؛
- در [5]، یک فهرست کشویی از تفسیرگرهای موجود؛
- در [6]، تفسیرگر دانلودشده در بخش |Python 3.8.1| را انتخاب کنید؛

- در [7]، تفسیرگر انتخابشده؛
- در [8]، فهرست بستههای در دسترس با این تفسیرگر. بستهها شامل ماژولهایی هستند که اسکریپتهای پایتون میتوانند از آنها استفاده کنند. صدها ماژول در دسترس وجود دارد؛
بیایید با ایجاد یک پوشه برای قرار دادن اولین اسکریپت پایتون خود شروع کنیم:

- روی پروژه کلیک راست کرده، سپس [1-2] را برای ایجاد یک پوشه انتخاب کنید؛
- در [3]، نام پوشه را تایپ کنید: این پوشه در داخل پوشه پروژه ایجاد خواهد شد؛
سپس یک اسکریپت پایتون ایجاد کنیم:

- روی پوشه [bases] کلیک راست کرده، سپس [1-3] را انتخاب کنید؛
- در [4-5]، نام اسکریپت را وارد کنید؛
بیایید اولین اسکریپت خود را بنویسیم:

-
در [3]، اسکریپت زیر را مینویسیم:
- خطوط ۱ و ۳: نظرات با نماد # شروع میشوند؛
- خط ۲: مقداردهی اولیه یک متغیر. پایتون نوع متغیرهای خود را اعلام نمیکند؛
- خط ۴: خروجی صفحه. نحو بهکاررفته در اینجا [format % données] با:
- قالب: name=%s، که در آن %s نشاندهنده موقعیت یک رشتهٔ کاراکتری است. این در بخش [données] عبارت یافت میشود؛
- data: مقدار متغیر [nom] جایگزین نگهدارندهٔ %s در رشتهٔ قالببندی خواهد شد؛
- با [4-5]، کد مطابق با توصیههای نهاد حاکم بر پایتون قالببندی مجدد میشود؛
اسکریپت با کلیک راست روی کد [6] اجرا میشود:

- در [7]، دستور اجرا میشود؛
- [8]، نتیجهٔ اجرا؛
برای اجرای اسکریپت در سند، کد را از URL |https://tahe.developpez.com/tutoriels-cours/python-flask-2020/ دانلود کنید.documents/python-flask-2020.rar| سپس، در PyCharm، به شرح زیر عمل کنید:

- در [1-2]، یک پروژهٔ موجود را باز کنید: پوشهای را که حاوی کد دانلودشده است انتخاب کنید؛
- در [3]، پروژه را باز کنید؛
- در [4-5]، یکی از اسکریپتهای پروژه را اجرا کنید؛

- در [7-8]، نتایج اجرا؛
2.2.2. محیط اجرای مجازی
محیط کاری ما اکنون راهاندازی شده و آماده به کار است. با این حال، قصد داریم آن را برای نوشتن اسکریپتهای این دوره تغییر دهیم. ابتدا بیایید پیکربندی PyCharm را تغییر دهیم:

در پنجره سمت راست:
- به طور پیشفرض، کادر [1] تیک خورده است. آن را از تیکخوردگی خارج کنید تا PyCharm به طور پیشفرض آخرین پروژه باز شده را باز نکند، بلکه به ما اجازه دهد که انتخاب کنیم کدام پروژه را باز کنیم؛
- با [2]، هنگام بستن پنجرهٔ برنامه، خروج از PyCharm تأیید نمیشود؛
- در [3]، پروژههای جدید در پنجرهای جداگانه باز میشوند؛
- در [4]، اگر در حالی که یک برنامه در حال اجراست PyCharm را ببندید، برنامه متوقف میشود؛
حالا PyCharm را ببندیم و دوباره آن را باز کنیم:

- در [1]، یک پروژه جدید ایجاد کنید؛
- در [2]، پوشه پروژه را مشخص کنید؛
- در [3] یک محیط مجازی راهاندازی کنید. یک محیط مجازی مختص پروژهای است که در حال ایجاد آن هستید. این محیط با محیطهای مجازی پروژههای دیگر تداخل ندارد. یک پروژه پایتون/فلسک از کتابخانههای خارجی متعددی استفاده میکند که نیاز به نصب دارند. پروژهای به نام P1 ممکن است از کتابخانه B در نسخه v1 استفاده کند، در حالی که پروژهای به نام P2 ممکن است از همان کتابخانه B اما در نسخه v2 استفاده کند. این دو نسخه ممکن است با یکدیگر سازگار باشند یا نباشند. با این حال، هنگامی که یک کتابخانه در نسخه v2 نصب میشود در حالی که نسخه v1 قبلاً نصب شده است، نسخه v1 با نسخه v2 جایگزین میشود. این امر میتواند برای پروژهای که از نسخه v1 استفاده میکرد مشکلساز شود، اگر نسخه جدید v2 با نسخه v1 کاملاً سازگار نباشد. برای جلوگیری از این مشکلات، هر پروژه در یک محیط مجازی ایزوله میشود؛
- در [4]، پوشهای را مشخص کنید که کتابخانههای پایتون دانلود شده در طول پروژه در آن ذخیره شوند. در اینجا، ما پوشهای به نام [venv] (محیط مجازی) را در داخل پوشه پروژه انتخاب کردهایم. این کار الزامی نیست؛
- در [5]، تفسیرگر پایتون پروژه. این همان چیزی است که در مرحله قبلی نصب کردیم؛
- در [6]، پروژه را ایجاد کنید؛

- در [7-8]، پروژه ایجاد شد؛
- در [9]، محیط اجرای پروژه، که به آن محیط مجازی گفته میشود؛
- در [10]، پوشه [site-packages] پوشهای است که کتابخانههای دانلود شده در مراحل بعدی در آن ذخیره خواهند شد؛
2.2.3. گیت
سپس یک سیستم کنترل کد منبع راهاندازی میکنیم. در این مورد، از Git [1-4] استفاده خواهیم کرد:

نرمافزار کنترل کد منبع (VCS: سیستم کنترل نسخه) به ما امکان میدهد تغییرات یک پروژه را پیگیری کنیم. شما میتوانید با استفاده از عملیاتی به نام «کامیت» (commit)، در نقاط مختلف چرخه عمر پروژه «اسنپشات» (snapshot) بگیرید. اگر دو کامیت در زمانهای T و T+1 انجام دهید، VCS به شما امکان میدهد تا ببینید چه تغییراتی بین دو نسخه کامیتشده رخ داده است. به طور معمول، VCS توسط تیمی از توسعهدهندگان استفاده میشود. آنها کد خود را پس از آزمایش صحیح، کامیت میکنند. با استفاده از VCS، توسعهدهندگان دیگر میتوانند این کد تأیید شده را بازیابی کرده و از آن استفاده کنند.
در این مورد، تنها یک توسعهدهنده وجود دارد. تجربه نشان میدهد که یک برنامه ممکن است در زمان T کار کند اما در زمان T+1 دیگر کار نکند. در این صورت، ما میخواهیم به زمان T برگردیم تا از ابتدا دوباره شروع کنیم. VCS به ما این امکان را میدهد، و به همین دلیل است که در اینجا از آن استفاده خواهیم کرد.
ما به شما نشان خواهیم داد که چگونه این کار را با گیت انجام دهید.

- در [1]، زبانه [Git] (پایین سمت چپ) را انتخاب کنید؛
- در [2]، میتوانید ببینید که ۴۹۵ فایل پروژه وجود دارد که توسط گیت نسخهبندی نشدهاند. این بدان معناست که آنها در کامیتهای پروژه گنجانده نخواهند شد؛
- در [3]، دکمه مربوط به [commit] یا دکمه اعتبارسنجی پروژه. همانطور که گفته شد، گیت سپس یک اسنپشات از پروژه میگیرد و آن را در پوشهای به نام [.git] در ریشه پروژه ذخیره میکند (که توسط PyCharm نمایش داده نمیشود اما در Windows File Explorer قابل مشاهده است)؛
بیایید پروژه را در وضعیت فعلیاش commit کنیم.
- در [4]، فهرست فایلهای بدون نسخه؛
- در [5]، تمام این فایلهای بدون نسخه به محیط مجازی [venv] تعلق دارند؛
- در [6]، هر commit باید با یک پیام همراه باشد. در اینجا، توسعهدهنده تغییراتی را که نسخه در حال commit شدن نسبت به آخرین نسخه commit شده ایجاد کرده است، توصیف میکند؛
ممکن است برخی پوشهها یا فایلها توسط Git نادیده گرفته شوند. بنابراین آنها هرگز در اسنپشات Git گنجانده نمیشوند. در [5] بالا، روی پوشه [venv] کلیک راست کنید.
- در [1-3]، مشخص میکنیم که پوشه [venv] نباید در کامیت گیت گنجانده شود. فهرست پوشهها و فایلهایی که توسط گیت نادیده گرفته میشوند، در فایلی به نام [.gitignore] [4] ذخیره میشود؛


- پس از مرحله قبلی، تمام فایلهای موجود در پوشه [venv] از لیست فایلهای بدون نسخه ناپدید میشوند. تنها فایلی که به تازگی ایجاد شده است، یعنی [.gitignore]، باقی میماند؛
- در [5]، آن را انتخاب میکنیم تا ذخیره شود؛
- در [6]، یک پیام commit ایجاد میکنیم:
- در [7]، تأیید میکنیم. سپس یک اسنپشات از پروژه گرفته میشود؛

- در [8-9]، محتویات فایل [.gitignore]: یک خط واحد حاوی نام پوشه [/venv]، که نشان میدهد محتویات آن باید هنگام پردازش عکسها نادیده گرفته شوند؛
حال ببینیم گیت چگونه میتواند مفید باشد. ابتدا یک پوشه به نام [git] ایجاد میکنیم (میتوانید از هر نام دیگری استفاده کنید – در پایان نمایش میتوان آن را حذف کرد):

- در [1-5]، یک پوشه به نام [git] ایجاد میکنیم؛

- در [6-10]، یک اسکریپت پایتون با نام [git_01] ایجاد کنید؛

- در [11-12]، اسکریپت تنها شامل یک کامنت است؛
- در [13-14]، یک نسخه از [git_01] ایجاد کنید. برای انجام این کار، [git_01] را انتخاب کرده و کلیدهای Ctrl-C (کپی) و سپس Ctrl-V (پیست) را فشار دهید و [git_02] را بهعنوان نام فایل وارد کنید؛

اکنون، بیایید پروژه خود را commit کنیم. از دو فایل [git_01, git_02] اسکرینشات گرفته خواهد شد؛

- در [1-3]، پروژه را کامیت میکنیم؛
- در [4]، فایلهای بدون نسخه را که میخواهید commit کنید انتخاب کنید – در این مورد، همه آنها؛
- در [5]، پیام مربوط به commit را وارد کنید؛
- در [6]، تأیید میکنید؛

- در [1-2]، commit را تأیید کنید؛
- در [3]، زبانه [Log] را انتخاب کنید؛
- در [4]، نمایی از شاخههای پروژه. در اینجا یک شاخه واحد به نام [master] وجود دارد؛
- در [5-6]، commitی که همین حالا انجام شده است؛
حالا بیایید به همین ترتیب یک اسکریپت به نام [git_03] ایجاد کنیم:

بیایید اسکریپت [git_02] را اصلاح کنیم و اسکریپت [git_01] را حذف کنیم:

سپس بیایید نسخه جدید را commit کنیم:

اکنون دو کامیت در لاگها داریم:

وقتی یک کامیت خاص را انتخاب میکنید، درخت فایلهای پروژه در سمت راست آن نمایش داده میشود:

اکنون فرض کنید که آخرین کامیت ما را به بنبست رسانده است و میخواهیم به حالتی که یکی از کامیتهای قبلی ایجاد کرده بود بازگردیم:

- در [1-2]، کمیتی را که میخواهیم به آن بازگردیم، انتخاب میکنیم؛
- در [3-5]، چندین حالت بازنشانی وجود دارد. ما حالت [hard] را انتخاب میکنیم که به وضعیت انتخابشده بازمیگردد و در عین حال تمام تغییرات انجامشده از آن زمان به بعد را دور میریزد؛

- در [6]، ما [git_01] را که حذف شده بود، بازیابی کردهایم؛
- در [7-8]، [git_02] به حالت اصلی خود بازگردانده میشود، بدون تغییری که ایجاد شده بود؛
حالا بیایید [git_02] را ویرایش کنیم و [git_03] و [1-4] را اضافه کنیم:

اکنون، بیایید فرایند بازگشت به commit اولیه را تکرار کنیم:

- به [1-4]، ما به تصویر از commit شماره ۱ بازمیگردیم؛
- با [5-6]، از گزینه [Keep] به جای [Hard] استفاده میکنیم. این گزینهها آسان برای درک نیستند. بنابراین باید آنها را امتحان کنیم:
![]() | ![]() |
- با [1]، فایل [git_03] هنوز وجود دارد؛
- با [2-3]، فایل [git_02] تغییرات خود را حفظ کرده است؛
سخت است بگوییم این [Revert Commit] چه کاری انجام داد. حالا بیایید وضعیت فعلی را commit کنیم:

- در [1-6]، commit؛

- در [9]، میتوانیم commit جدید را ببینیم؛
حالا، بیایید سعی کنیم به commit 1 برگردیم، همانطور که قبلاً انجام شده است:
![]() | ![]() |
- در [1-6]، ما به کامیت شماره ۱ در حالت [Hard] بازمیگردیم؛

- به [7-8]؛ این بار، تمام تغییراتی که از اولین commit انجام شده بود، واقعاً از دست رفته است؛
در ادامه این بخش به [Git] بازنمیگردیم. خواننده میتواند به شرح زیر ادامه دهد:
- آنها میتوانند مثالهای ارائهشده را یا با تایپ کردن خودشان یا با دانلود از وبسایت دوره دنبال کنند؛
- هرگاه یک مثال کار کند، میتوانند پروژه خود را کامیت کنند؛
- هنگام توسعه کد خود و رسیدن به بنبست، میدانند که میتوانند با بازگشت به یک کامیت قبلی، به وضعیت پایدار بازگردند؛
2.3. قواعد کدنویسی پایتون
شما میتوانید کد پایتون را بدون پیروی از هیچیک از قراردادهای کدنویسی بنویسید و همچنان کار خواهد کرد. با این حال، ممکن است در جامعه پایتون که قواعد کدنویسی مشخصی را وضع کرده است، به خوبی پذیرفته نشود. این قواعد در پستی در |https://stackoverflow.com/questions/159720/what-is-the-naming-convention-in-python-for-variable-and-function-names| خلاصه شدهاند:

- نام یک ماژول (module_name) از قاعدهای پیروی میکند که گاهی اوقات به آن [snake_case] گفته میشود: تمام حروف کوچک، با جدا کردن کلمات با خط تیره در صورت لزوم. این قرارداد [snake_case] برای نامهای متدها، پکیجها، متغیرها و توابع اعمال میشود؛
- نام یک کلاس (ClassName) از قراردادی پیروی میکند که گاهی به آن [PascalCase] گفته میشود: یک دنباله از کلمات که به صورت یک کلمه نوشته شدهاند و حرف اول هر کلمه بزرگ نوشته میشود؛
- نامهای ثابت از کنوانسیون [SNAKE_CASE] پیروی میکنند: دنبالهای از کلمات بزرگنویس که با خط تیره زیرین از هم جدا شدهاند؛
این کنوانسیونها به طور کلی در این سند رعایت شدهاند. با این حال، برای ماژولهایی که یک کلاس را تعریف میکنند، من نام ماژول را با نام کلاسی که در خود جای داده است یکسان قرار دادهام. بنابراین، این ماژولها به جای کنوانسیون [snake_case]، از کنوانسیون [PascalCase] پیروی میکنند. من میخواستم بتوانم ماژولهای کلاس را به سرعت شناسایی کنم.



