|
| 1 | +--- |
| 2 | +jupytext: |
| 3 | + text_representation: |
| 4 | + extension: .md |
| 5 | + format_name: myst |
| 6 | + format_version: 0.13 |
| 7 | + jupytext_version: 1.17.2 |
| 8 | +kernelspec: |
| 9 | + name: python3 |
| 10 | + display_name: Python 3 (ipykernel) |
| 11 | + language: python |
| 12 | +heading-map: |
| 13 | + overview: مروری کلی |
| 14 | + working-with-python-files-: کار با فایلهای Python |
| 15 | + development-environments: محیطهای توسعه |
| 16 | + a-step-forward-from-jupyter-notebooks-jupyterlab: 'یک قدم جلوتر از Jupyter Notebooks: JupyterLab' |
| 17 | + using-magic-commands: استفاده از دستورات جادویی |
| 18 | + using-the-terminal: استفاده از ترمینال |
| 19 | + a-walk-through-visual-studio-code: گشت و گذاری در Visual Studio Code |
| 20 | + using-the-run-button: استفاده از دکمه run |
| 21 | + git-your-hands-dirty: Git را امتحان کنید |
| 22 | +--- |
| 23 | + |
| 24 | +(workspace)= |
| 25 | +```{raw} jupyter |
| 26 | +<div id="qe-notebook-header" align="right" style="text-align:right;"> |
| 27 | + <a href="https://quantecon.org/" title="quantecon.org"> |
| 28 | + <img style="width:250px;display:inline;" width="250px" src="https://assets.quantecon.org/img/qe-menubar-logo.svg" alt="QuantEcon"> |
| 29 | + </a> |
| 30 | +</div> |
| 31 | +``` |
| 32 | + |
| 33 | +# نوشتن برنامههای طولانیتر |
| 34 | + |
| 35 | +## مروری کلی |
| 36 | + |
| 37 | +تا کنون، استفاده از Jupyter Notebooks را در نوشتن و اجرای کد Python بررسی کردهایم. |
| 38 | + |
| 39 | +در حالی که آنها هنگام کار با قطعات کوچک کد کارآمد و سازگار هستند، Notebooks بهترین انتخاب برای برنامهها و اسکریپتهای طولانیتر نیستند. |
| 40 | + |
| 41 | +Jupyter Notebooks برای محاسبات تعاملی (یعنی گردش کارهای علم داده) مناسب هستند و میتوانند به اجرای قطعات کد یکی یکی کمک کنند. |
| 42 | + |
| 43 | +فایلهای متنی و اسکریپتها امکان نوشتن و اجرای قطعات بلند کد را به یکباره فراهم میکنند. |
| 44 | + |
| 45 | +ما استفاده از اسکریپتهای Python را به عنوان یک جایگزین بررسی خواهیم کرد. |
| 46 | + |
| 47 | +سپس محیطهای توسعه Jupyter Lab و Visual Studio Code (VS Code) به همراه یک آشنایی مقدماتی با کنترل نسخه (Git) معرفی میشوند. |
| 48 | + |
| 49 | +در این سخنرانی، شما یاد خواهید گرفت که |
| 50 | +- با اسکریپتهای Python کار کنید |
| 51 | +- محیطهای توسعه مختلف را راهاندازی کنید |
| 52 | +- با GitHub شروع کنید |
| 53 | + |
| 54 | +```{note} |
| 55 | +از این به بعد، فرض بر این است که شما یک محیط Anaconda آماده و در حال اجرا دارید. |
| 56 | +
|
| 57 | +اگر هنوز این کار را نکردهاید، ممکن است بخواهید [یک محیط conda جدید ایجاد کنید](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-with-commands). |
| 58 | +``` |
| 59 | + |
| 60 | +## کار با فایلهای Python |
| 61 | + |
| 62 | +فایلهای Python هنگام نوشتن بلوکهای بلند و قابل استفاده مجدد کد استفاده میشوند - طبق قرارداد، آنها پسوند `.py` دارند. |
| 63 | + |
| 64 | +بیایید با کار با مثال زیر شروع کنیم. |
| 65 | + |
| 66 | +```{code-cell} ipython3 |
| 67 | +:caption: sine_wave.py |
| 68 | +:lineno-start: 1 |
| 69 | +
|
| 70 | +import matplotlib.pyplot as plt |
| 71 | +import numpy as np |
| 72 | +
|
| 73 | +x = np.linspace(0, 10, 100) |
| 74 | +y = np.sin(x) |
| 75 | +
|
| 76 | +plt.plot(x, y) |
| 77 | +plt.xlabel('x') |
| 78 | +plt.ylabel('y') |
| 79 | +plt.title('Sine Wave') |
| 80 | +plt.show() |
| 81 | +``` |
| 82 | + |
| 83 | +از آنجا که راههای مختلفی برای اجرای کد وجود دارد، ما آنها را در زمینه محیطهای توسعه مختلف بررسی خواهیم کرد. |
| 84 | + |
| 85 | +یکی از مزایای اصلی استفاده از اسکریپتهای Python در این واقعیت نهفته است که میتوانید قابلیتها را از اسکریپتهای دیگر به اسکریپت فعلی یا Jupyter Notebook خود "import" کنید. |
| 86 | + |
| 87 | +بیایید کد قبلی را به یک تابع بازنویسی کنیم و آن را در فایلی به نام `sine_wave.py` بنویسیم. |
| 88 | + |
| 89 | +```{code-cell} ipython3 |
| 90 | +:caption: sine_wave.py |
| 91 | +:lineno-start: 1 |
| 92 | +
|
| 93 | +%%writefile sine_wave.py |
| 94 | +
|
| 95 | +import matplotlib.pyplot as plt |
| 96 | +import numpy as np |
| 97 | +
|
| 98 | +# Define the plot_wave function. |
| 99 | +def plot_wave(title : str = 'Sine Wave'): |
| 100 | + x = np.linspace(0, 10, 100) |
| 101 | + y = np.sin(x) |
| 102 | +
|
| 103 | + plt.plot(x, y) |
| 104 | + plt.xlabel('x') |
| 105 | + plt.ylabel('y') |
| 106 | + plt.title(title) |
| 107 | + plt.show() |
| 108 | +``` |
| 109 | + |
| 110 | +```{code-cell} ipython3 |
| 111 | +:caption: second_script.py |
| 112 | +:lineno-start: 1 |
| 113 | +
|
| 114 | +import sine_wave # Import the sine_wave script |
| 115 | + |
| 116 | +# Call the plot_wave function. |
| 117 | +sine_wave.plot_wave("Sine Wave - Called from the Second Script") |
| 118 | +``` |
| 119 | + |
| 120 | +این به شما امکان میدهد کد خود را به قطعات تقسیم کرده و پایگاه کد خود را بهتر ساختار دهید. |
| 121 | + |
| 122 | +برای اطلاعات بیشتر در مورد import کردن قابلیتها، به استفاده از [ماژولها](https://docs.python.org/3/tutorial/modules.html) و [بستهها](https://docs.python.org/3/tutorial/modules.html#packages) نگاه کنید. |
| 123 | + |
| 124 | +## محیطهای توسعه |
| 125 | + |
| 126 | +یک محیط توسعه یک فضای کاری یکپارچه است که در آن میتوانید |
| 127 | +- کد خود را ویرایش و اجرا کنید |
| 128 | +- تست و اشکالزدایی کنید |
| 129 | +- فایلهای پروژه را مدیریت کنید |
| 130 | + |
| 131 | +این سخنرانی شما را با نحوه کار دو محیط توسعه آشنا میکند. |
| 132 | + |
| 133 | +## یک قدم جلوتر از Jupyter Notebooks: JupyterLab |
| 134 | + |
| 135 | +JupyterLab یک محیط توسعه مبتنی بر مرورگر برای Jupyter Notebooks، اسکریپتهای کد و فایلهای داده است. |
| 136 | + |
| 137 | +اگر میخواهید قبل از نصب محلی آن را آزمایش کنید، میتوانید [JupyterLab را در مرورگر امتحان کنید](https://jupyter.org/try-jupyter/lab/). |
| 138 | + |
| 139 | +میتوانید JupyterLab را با استفاده از pip نصب کنید |
| 140 | + |
| 141 | +``` |
| 142 | +> pip install jupyterlab |
| 143 | +``` |
| 144 | + |
| 145 | +و آن را در مرورگر، مشابه Jupyter Notebooks، راهاندازی کنید. |
| 146 | + |
| 147 | +``` |
| 148 | +> jupyter-lab |
| 149 | +``` |
| 150 | + |
| 151 | +```{figure} /_static/lecture_specific/workspace/jupyter_lab_cmd.png |
| 152 | +:figclass: auto |
| 153 | +``` |
| 154 | + |
| 155 | +میبینید که Jupyter Server در حال اجرا روی پورت 8888 بر روی localhost است. |
| 156 | + |
| 157 | +رابط کاربری زیر باید به طور خودکار در مرورگر پیشفرض شما باز شود - در غیر این صورت، CTRL + Click روی URL سرور. |
| 158 | + |
| 159 | +```{figure} /_static/lecture_specific/workspace/jupyter_lab.png |
| 160 | +:figclass: auto |
| 161 | +``` |
| 162 | + |
| 163 | +روی موارد زیر کلیک کنید |
| 164 | + |
| 165 | +- دکمه Python 3 (ipykernel) در زیر Notebooks برای باز کردن یک Jupyter Notebook جدید |
| 166 | +- دکمه Python File برای باز کردن یک اسکریپت Python جدید (.py) |
| 167 | + |
| 168 | +همیشه میتوانید این تب راهانداز را با کلیک بر روی دکمه '+' در بالا باز کنید. |
| 169 | + |
| 170 | +تمام فایلها و پوشهها در دایرکتوری کاری شما را میتوان در File Browser (تب سمت چپ) یافت. |
| 171 | + |
| 172 | +میتوانید با استفاده از دکمههای موجود در بالای تب File Browser، فایلها و پوشههای جدید ایجاد کنید. |
| 173 | + |
| 174 | +```{figure} /_static/lecture_specific/workspace/file_browser.png |
| 175 | +:figclass: auto |
| 176 | +``` |
| 177 | +میتوانید با مراجعه به تب Extensions، افزونههایی را نصب کنید که قابلیتهای JupyterLab را افزایش میدهند. |
| 178 | + |
| 179 | +```{figure} /_static/lecture_specific/workspace/extensions.png |
| 180 | +:figclass: auto |
| 181 | +``` |
| 182 | +برگشت به اسکریپتهای مثال قبلی، دو راه برای کار با آنها در JupyterLab وجود دارد. |
| 183 | + |
| 184 | +- استفاده از دستورات جادویی |
| 185 | +- استفاده از ترمینال |
| 186 | + |
| 187 | +### استفاده از دستورات جادویی |
| 188 | + |
| 189 | +Jupyter Notebooks و JupyterLab از استفاده از [دستورات جادویی](https://ipython.readthedocs.io/en/stable/interactive/magics.html) پشتیبانی میکنند - دستوراتی که قابلیتهای یک Jupyter Notebook استاندارد را گسترش میدهند. |
| 190 | + |
| 191 | +دستور جادویی `%run` به شما امکان میدهد یک اسکریپت Python را از درون یک Notebook اجرا کنید. |
| 192 | + |
| 193 | +این یک راه راحت برای اجرای اسکریپتهایی است که در همان دایرکتوری Notebook خود روی آنها کار میکنید و خروجیها را در داخل Notebook ارائه میدهید. |
| 194 | + |
| 195 | +```{figure} /_static/lecture_specific/workspace/jupyter_lab_py_run.png |
| 196 | +:figclass: auto |
| 197 | +``` |
| 198 | + |
| 199 | +### استفاده از ترمینال |
| 200 | + |
| 201 | +با این حال، اگر فقط به دنبال اجرای فایل `.py` هستید، گاهی اوقات استفاده از ترمینال آسانتر است. |
| 202 | + |
| 203 | +از راهانداز یک ترمینال باز کنید و دستور زیر را اجرا کنید. |
| 204 | + |
| 205 | +``` |
| 206 | +> python <path to file.py> |
| 207 | +``` |
| 208 | + |
| 209 | +```{figure} /_static/lecture_specific/workspace/jupyter_lab_py_run_term.png |
| 210 | +:figclass: auto |
| 211 | +``` |
| 212 | + |
| 213 | +```{note} |
| 214 | +همچنین میتوانید اسکریپت را خط به خط با باز کردن یک کنسول ipykernel اجرا کنید، یا |
| 215 | +- از راهانداز |
| 216 | +- یا با کلیک راست در داخل Notebook و انتخاب Create Console for Editor |
| 217 | +
|
| 218 | +از Shift + Enter برای اجرای یک خط کد استفاده کنید. |
| 219 | +``` |
| 220 | + |
| 221 | +## گشت و گذاری در Visual Studio Code |
| 222 | + |
| 223 | +Visual Studio Code (VS Code) یک ویرایشگر کد و فضای کاری توسعه است که میتواند |
| 224 | +- در [مرورگر](https://vscode.dev/) اجرا شود. |
| 225 | +- به عنوان یک [نصب محلی](https://code.visualstudio.com/docs/?dv=win) اجرا شود. |
| 226 | + |
| 227 | +هر دو رابط کاربری یکسان هستند. |
| 228 | + |
| 229 | +وقتی VS Code را راهاندازی میکنید، رابط کاربری زیر را خواهید دید. |
| 230 | + |
| 231 | +```{figure} /_static/lecture_specific/workspace/vs_code_home.png |
| 232 | +:figclass: auto |
| 233 | +``` |
| 234 | + |
| 235 | +از طریق راهنماهای گام به گام، نحوه سفارشیسازی VS Code به دلخواه خود را کشف کنید. |
| 236 | + |
| 237 | +```{figure} /_static/lecture_specific/workspace/vs_code_walkthrough.png |
| 238 | +:figclass: auto |
| 239 | +``` |
| 240 | +هنگام مواجهه با پیام زیر، ادامه دهید و تمام افزونههای پیشنهادی را نصب کنید. |
| 241 | + |
| 242 | +```{figure} /_static/lecture_specific/workspace/vs_code_install_ext.png |
| 243 | +:figclass: auto |
| 244 | +``` |
| 245 | +همچنین میتوانید افزونهها را از تب Extensions نصب کنید. |
| 246 | + |
| 247 | +```{figure} /_static/lecture_specific/workspace/vs_code_extensions.png |
| 248 | +:figclass: auto |
| 249 | +``` |
| 250 | +Jupyter Notebooks (فایلهای `.ipynb`) را میتوان در VS Code کار کرد. |
| 251 | + |
| 252 | +مطمئن شوید که قبل از تلاش برای باز کردن یک Jupyter Notebook، افزونه Jupyter را از تب Extensions نصب کنید. |
| 253 | + |
| 254 | +یک فایل جدید ایجاد کنید (در تب file Explorer) و آن را با پسوند `.ipynb` ذخیره کنید. |
| 255 | + |
| 256 | +یک kernel/environment برای اجرای Notebook در آن با کلیک بر روی دکمه Select Kernel در گوشه بالا سمت راست ویرایشگر انتخاب کنید. |
| 257 | + |
| 258 | +```{figure} /_static/lecture_specific/workspace/vs_code_kernels.png |
| 259 | +:figclass: auto |
| 260 | +``` |
| 261 | + |
| 262 | +VS Code همچنین از طریق تب Source Control قابلیت کنترل نسخه عالی دارد. |
| 263 | + |
| 264 | +```{figure} /_static/lecture_specific/workspace/vs_code_git.png |
| 265 | +:figclass: auto |
| 266 | +``` |
| 267 | +حساب GitHub خود را به VS Code متصل کنید تا تغییرات را به مخازن خود push و pull کنید. |
| 268 | + |
| 269 | +بحثهای بیشتر در مورد کنترل نسخه را میتوان در بخش بعدی یافت. |
| 270 | + |
| 271 | +برای باز کردن یک Terminal جدید در VS Code، روی تب Terminal کلیک کرده و New Terminal را انتخاب کنید. |
| 272 | + |
| 273 | +VS Code یک Terminal جدید در همان دایرکتوری که در آن کار میکنید باز میکند - یک PowerShell در Windows و یک Bash در Linux. |
| 274 | + |
| 275 | +میتوانید shell را تغییر دهید یا یک instance جدید از طریق منوی کشویی در انتهای سمت راست تب ترمینال باز کنید. |
| 276 | + |
| 277 | +```{figure} /_static/lecture_specific/workspace/vs_code_terminal_opts.png |
| 278 | +:figclass: auto |
| 279 | +``` |
| 280 | + |
| 281 | +VS Code به شما کمک میکند محیطهای conda را بدون استفاده از خط فرمان مدیریت کنید. |
| 282 | + |
| 283 | +Command Palette را باز کنید (CTRL + SHIFT + P یا از منوی کشویی تحت تب View) و ```Python: Select Interpreter``` را جستجو کنید. |
| 284 | + |
| 285 | +این محیطهای موجود را بارگذاری میکند. |
| 286 | + |
| 287 | +همچنین میتوانید با استفاده از ```Python: Create Environment``` در Command Palette، محیطهای جدید ایجاد کنید. |
| 288 | + |
| 289 | +یک محیط جدید (پوشه .conda) در دایرکتوری کاری فعلی ایجاد میشود. |
| 290 | + |
| 291 | +در مورد اسکریپتهای مثال قبلی، باز هم دو راه برای کار با آنها در VS Code وجود دارد. |
| 292 | + |
| 293 | +- استفاده از دکمه run |
| 294 | +- استفاده از ترمینال |
| 295 | + |
| 296 | +### استفاده از دکمه run |
| 297 | + |
| 298 | +میتوانید اسکریپت را با کلیک بر روی دکمه run در گوشه بالا سمت راست ویرایشگر اجرا کنید. |
| 299 | + |
| 300 | +```{figure} /_static/lecture_specific/workspace/vs_code_run.png |
| 301 | +:figclass: auto |
| 302 | +``` |
| 303 | + |
| 304 | +همچنین میتوانید اسکریپت را به صورت تعاملی با انتخاب گزینه **Run Current File in Interactive Window** از منوی کشویی اجرا کنید. |
| 305 | + |
| 306 | +```{figure} /_static/lecture_specific/workspace/vs_code_run_button.png |
| 307 | +:figclass: auto |
| 308 | +``` |
| 309 | +این یک کنسول ipykernel ایجاد میکند و اسکریپت را اجرا میکند. |
| 310 | + |
| 311 | +### استفاده از ترمینال |
| 312 | + |
| 313 | +دستور `python <path to file.py>` بر روی کنسول انتخابی شما اجرا میشود. |
| 314 | + |
| 315 | +اگر از یک دستگاه Windows استفاده میکنید، میتوانید یا از Anaconda Prompt یا Command Prompt استفاده کنید - اما به طور کلی نه از PowerShell. |
| 316 | + |
| 317 | +در اینجا یک اجرای کد قبلی آمده است. |
| 318 | + |
| 319 | +```{figure} /_static/lecture_specific/workspace/sine_wave_import.png |
| 320 | +:figclass: auto |
| 321 | +``` |
| 322 | + |
| 323 | +```{note} |
| 324 | +اگر میخواهید بستهها را توسعه دهید و ابزارهایی با استفاده از Python بسازید، ممکن است بخواهید به [استفاده از Docker containers و VS Code](https://github.com/RamiKrispin/vscode-python) نگاه کنید. |
| 325 | +
|
| 326 | +با این حال، این خارج از تمرکز این سخنرانیها است. |
| 327 | +``` |
| 328 | + |
| 329 | +## Git را امتحان کنید |
| 330 | + |
| 331 | +این بخش شما را با git و GitHub آشنا میکند. |
| 332 | + |
| 333 | +[Git](https://git-scm.com/) یک *سیستم کنترل نسخه* است --- نرمافزاری که برای مدیریت پروژههای دیجیتال مانند کتابخانههای کد استفاده میشود. |
| 334 | + |
| 335 | +در بسیاری از موارد، مجموعههای مرتبط فایلها --- که *مخازن* نامیده میشوند --- بر روی [GitHub](https://github.com/) ذخیره میشوند. |
| 336 | + |
| 337 | +GitHub یک دنیای شگفتانگیز از پروژههای کدنویسی مشارکتی است. |
| 338 | + |
| 339 | +به عنوان مثال، میزبان بسیاری از کتابخانههای علمی است که بعداً از آنها استفاده خواهیم کرد، مانند [این یکی](https://github.com/pandas-dev/pandas). |
| 340 | + |
| 341 | +Git نرمافزار زیربنایی است که برای مدیریت این پروژهها استفاده میشود. |
| 342 | + |
| 343 | +Git یک ابزار بسیار قدرتمند برای همکاری توزیع شده است --- به عنوان مثال، ما از آن برای به اشتراک گذاشتن و همگامسازی تمام فایلهای منبع این سخنرانیها استفاده میکنیم. |
| 344 | + |
| 345 | +دو نوع اصلی Git وجود دارد |
| 346 | + |
| 347 | +1. نسخه [خط فرمان Git](https://git-scm.com/downloads) ساده وانیلی |
| 348 | +2. نسخههای مختلف GUI کلیک و اشاره |
| 349 | + * برای مثال، [نسخه GitHub](https://github.com/apps/desktop) یا Git GUI یکپارچه شده در IDE شما را ببینید. |
| 350 | + |
| 351 | +در صورتی که قبلاً این کار را نکردهاید، امتحان کنید |
| 352 | + |
| 353 | +1. نصب Git. |
| 354 | +1. دریافت یک کپی از [QuantEcon.py](https://github.com/QuantEcon/QuantEcon.py) با استفاده از Git. |
| 355 | + |
| 356 | +به عنوان مثال، اگر نسخه خط فرمان را نصب کردهاید، یک ترمینال باز کنید و وارد کنید. |
| 357 | + |
| 358 | +```bash |
| 359 | +git clone https://github.com/QuantEcon/QuantEcon.py |
| 360 | +``` |
| 361 | +(این فقط `git clone` در جلوی URL مخزن است) |
| 362 | + |
| 363 | +این دستور تمام اجزای لازم را برای بازسازی سخنرانیای که اکنون میخوانید دانلود میکند. |
| 364 | + |
| 365 | +به عنوان وظیفه دوم، |
| 366 | + |
| 367 | +1. در [GitHub](https://github.com/) ثبت نام کنید. |
| 368 | +1. به 'forking' مخازن GitHub نگاه کنید (forking به معنای ایجاد کپی خود از یک مخزن GitHub است که در GitHub ذخیره میشود). |
| 369 | +1. [QuantEcon.py](https://github.com/QuantEcon/QuantEcon.py) را fork کنید. |
| 370 | +1. fork خود را در یک دایرکتوری محلی clone کنید، ویرایشها انجام دهید، آنها را commit کنید و به مخزن GitHub fork شده خود push کنید. |
| 371 | +1. اگر بهبود ارزشمندی ایجاد کردید، برای ما یک [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) ارسال کنید! |
| 372 | + |
| 373 | +برای خواندن در مورد این موضوعات و سایر موضوعات، امتحان کنید |
| 374 | + |
| 375 | +* [مستندات رسمی Git](https://git-scm.com/doc). |
| 376 | +* خواندن مستندات در [GitHub](https://docs.github.com/en). |
| 377 | +* [کتاب Pro Git](https://git-scm.com/book) توسط Scott Chacon و Ben Straub. |
| 378 | +* یکی از هزاران آموزش Git در اینترنت. |
0 commit comments