ابزارهای مفید برای توسعه‌ی محلی

ابزارهای مفیدی که می‌توانند در توسعه‌ی کد Python برای Exercism روی دستگاه خودتان به شما کمک کنند.


Note

این مجموعه‌ای از ابزارهایی است که در جامعه‌ی ما محبوب‌اند. قصد ما تجویز کردن یا ادعای کامل بودن نیست. به نظر ما این ابزارها کارشان را خوب انجام می‌دهند، اما بی‌شک ابزارهای خوب دیگری هم وجود دارند. اگر پیشنهادی برای ویرایشگر، IDE، ابزار یا افزونه دارید، از شما می‌خواهیم آن را در همین سند در GitHub اضافه کنید.



پیش از آنکه شروع به کاوش کنید، مطمئن شوید که نسخه‌ی تازه‌ای از Python نصب شده باشد. پلتفرم وب Exercism در حال حاضر از Python 3.10 - 3.13.5 (تمرین‌ها و Testها) و Python 3.13.5 (ابزارها) پشتیبانی می‌کند. اجراکننده‌ی Test آنلاین ما در حال حاضر از pytest 8.4.0 و pytest-subtests 0.14.2 استفاده می‌کند. تحلیل‌گر آنلاین ما از pylint 4.0.4 استفاده می‌کند. استفاده از نسخه‌های متفاوت Python، pytest یا pylint به‌صورت محلی ممکن است نتایجی متفاوت از وب‌سایت به شما بدهد. برای اطلاعات بیشتر، به نصب Python به‌صورت محلی مراجعه کنید.


محیط مجازی

محیط‌های مجازی Python جداسازی سبکی از زمان اجرا و بسته‌ها فراهم می‌کنند. آن‌ها می‌توانند با گرد هم نگه‌داشتن بسته‌های Python که نصب می‌کنید درون پوشه‌ی یک محیط مشخص، به سازمان‌دهی پروژه‌هایتان کمک کنند. محیط‌های مختلف می‌توانند نسخه‌های متفاوتی از زمان اجرای Python را همراه با وابستگی‌های هر پروژه یا کتابخانه نگه دارند. این کار به پیشگیری از Bugها و ناسازگاری‌هایی کمک می‌کند که از ارتقای یک کتابخانه برای یک پروژه و «شکستن» یک وابستگی در پروژه‌ای دیگر ناشی می‌شوند.

امروزه ابزارهای زیادی در قالب محیط مجازی و شبه‌محیط مجازی به کار می‌روند و جنبشی رو به رشد وجود دارد که به‌جای محیط‌های مجازی از فراداده‌ی درون‌خطی اسکریپت، کانتینرهای توسعه یا docker استفاده کند. مهم است که راهبردهای مختلف را امتحان کنید و راهبردی را بیابید که با سبک توسعه و نیازهای پروژه‌ی شما سازگار است. فرض نکنید که راهبردهای اینجا برای همه یکسان جواب می‌دهند یا تنها گزینه‌های شما هستند. برای مروری کلی‌تر بر ابزارهایی که اینجا پوشش داده نشده‌اند، این نوشته‌ی وبلاگ از Bas Nijholt را ببینید و کنجکاو بمانید.

سه ابزار اصلی محیط مجازی را اینجا بررسی می‌کنیم: venv از کتابخانه‌ی استاندارد Python، conda env از طرف سوم که از مدیر بسته‌ی conda و (معمولاً) توزیع Anaconda Python استفاده می‌کند، و uv که جانشین pip + venv از طرف سوم است. هر سه استفاده و/یا نصبشان نسبتاً ساده است.

به‌علاوه، PyEnv، Poetry و virtualenvwrapper ابزارهایی هستند که می‌توانند به مدیریت چندین نسخه از Python و چندین محیط Python روی یک ماشین کمک کنند.


ساخت محیط مجازی با venv

برای ساخت محیط مجازی با venv، با cd به پوشه‌ای بروید که می‌خواهید محیط‌هایتان را در آن نگه دارید. این پوشه باید جدا از Code پروژه‌تان باشد و پوشه‌ای که نمی‌خواهید آن را در کنترل نسخه ثبت کنید. سپس فرمان venv را با نام پوشه‌ای اجرا کنید که می‌خواهید این محیط خاص را در آن نگه دارید. قرارداد رایج این است که آن پوشه را <project-name-here>_venv بنامید:

Windows

PS C:\Users\foobar> py -m venv {name_of_virtualenv}

برای فعال‌سازی محیط مجازی، فرمان زیر را اجرا کنید:

PS> .\{name_of_virtual_env}\Scripts\activate.bat
(venv) PS> _

Linux/MacOS

$ python3 -m venv {name_of_virtualenv}
created virtual environment ... in 8568ms

برای فعال‌سازی محیط مجازی، فرمان زیر را اجرا کنید:

$ source {name_of_virtual_env}/bin/activate
(venv) $ _

وقتی یک venv فعال شد، می‌توانید فرمان‌های pip را برای نصب بسته‌ها «درون» محیط اجرا کنید. بسته‌های نصب‌شده به نسخه‌ی Python همان venv گره می‌خورند و درون {name_of_virtual_env}/Lib قرار می‌گیرند.

غیرفعال‌سازی یک محیط مجازی با فراخوانی اسکریپت deactivate انجام می‌شود که در همان پوشه‌ی activate قرار دارد.


ساخت محیط مجازی با conda

آخرین نسخه‌ی conda را می‌توان از طریق miniconda نصب کرد. این برگه‌ی تقلب conda بسیار کمک‌کننده است، و همچنین مستندات conda.

conda در ابتدا به‌عنوان مدیر بسته‌ی Python برای توزیع محبوب Anaconda distribution از «Python علمی» ساخته شد و بعدها تعمیم یافت و گسترده‌تر شد. محیط‌های conda شبیه venvها هستند، با این تفاوت اصلی که conda می‌تواند علاوه بر Python، برای بسیاری از زبان‌های برنامه‌نویسی دیگر هم محیط مجازی بسازد و بسته نصب کند.

زبان‌های پشتیبانی‌شده توسط conda شامل R، JavaScript، Ruby، Fortran، C/C++، Scala، Java و موارد دیگر است. برای مقایسه‌ی فرمان‌های conda و venv، به مرجع فرمان conda نگاه کنید.


MacOS/Linux

برای ساخت یک محیط conda، فرمان زیر را تایپ کنید و {name of environment} را با نام دلخواهتان و python={version} را با نسخه‌ی موردنظر Python جایگزین کنید. پس از آن می‌توانید هر بسته‌ی اضافه‌ای را که می‌خواهید درون محیط نصب کنید بیاورید:

$ conda create --name {name of environment} python={version} "pytest>6.0" pylint
...

## Package Plan ##

  environment location: /usr/local/anaconda3/envs/test_env

  added / updated specs:
    - pylint
    - pytest[version='>6']
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    astroid-2.11.1             |  py310h2ec42d9_0         364 KB  conda-forge
    dill-0.3.4                 |     pyhd8ed1ab_0          62 KB  conda-forge
    lazy-object-proxy-1.7.1    |  py310he24745e_0          32 KB  conda-forge
    ....
    additional packages here
    ....
    ------------------------------------------------------------
                                           Total:        21.8 MB

Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate test_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

Windows

ساخت محیط conda در Windows از همان فرمان‌های کلی Linux/MacOS استفاده می‌کند. با این حال، توصیه می‌شود به‌جای افزودن conda به مسیر (path) خود، از اعلان‌های cmd یا powershell مربوط به Anaconda استفاده کنید:

(base) PS C:\Users\foobar> conda create --name {name_of_environment} python={version} "pytest>6" pylint
...

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\ProgramData\Anaconda3\envs\test_env

  added / updated specs:
    - pylint
    - pytest[version='>6']
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    astroid-2.11.1             |  py310h5588dad_0         364 KB  conda-forge
    attrs-21.4.0               |     pyhd8ed1ab_0          49 KB  conda-forge
    bzip2-1.0.8                |       h8ffe710_4         149 KB  conda-forge
    ...
    additional packages here
    ...
    ------------------------------------------------------------
                                           Total:        37.5 MB

Proceed ([y]/n)? y
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate test_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

UV

کار روی پروژه‌ها با uv: uv

uv یک ابزار مدیریت بسته و پروژه‌ی Python از Astral است که با Rust نوشته شده است. این ابزار برای جایگزینی pip، venv، poetry و دیگر ابزارهای بسته‌بندی/مدیریت وابستگی Python طراحی شده است. برخلاف Conda یا Mamba، uv تنها برای Python تخصصی و سفارشی شده است. با این حال، uv از ساخت ماژول‌های افزونه‌ی Python که با زبان‌هایی دیگر مانند Fortran نوشته شده‌اند پشتیبانی می‌کند. Astral همچنین توسعه‌دهنده‌ی Ruff، ابزار محبوب لینت، و TY، بررسی‌کننده‌ی نوع ایستا برای راهنمای نوع Python است؛ هر دو با Rust نوشته شده‌اند.

به‌جای پرداختن به جزئیات در اینجا، مستندات UV بهترین منبع شما برای نصب و راه‌اندازی است.

پوشش محیط مجازی

مستندات و پیشینه: virtualenvwrapper.

بسته‌ی virtualenvwrapper روی venv کار می‌کند تا همه‌ی محیط‌های مجازی شما را در یک جا مدیریت کند. می‌توانید با فرمان‌هایی شبیه به Linux مانند lsvirtualenv (برای فهرست کردن محیط‌ها) و mkvirtualenv (برای ساختن یک محیط) محیط بسازید، کپی کنید، حذف کنید و میان آن‌ها جابه‌جا شوید. همچنین به شما اجازه می‌دهد با استفاده از افزونه‌ها ابزارهای مدیریتی بیشتری اضافه کنید. حتی می‌توانید با این آموزش افزونه‌های خودتان را برای این ابزار بسازید.


PyEnv

pyenv نسخه‌ی Python از ابزارهای محبوب rbenv/ruby-build است که برای Python تغییر داده شده‌اند. این ابزار در اصل مجموعه‌ای از اسکریپت‌ها و shimهاست که امکان تعیین نسخه‌ی Python هم به‌صورت سراسری و هم مخصوص هر کاربر را فراهم می‌کند. می‌کوشد به سنت Unix پایبند بماند: ابزاری تک‌منظوره و بی‌مزاحمت که یک کار را خوب انجام می‌دهد.

pyenv و مستندات pyenv را می‌توانید در GitHub پیدا کنید.



ویرایشگر و IDE



Visual Studio Code

Visual Studio Code (VS Code) یک ویرایشگر Code رایگان است که Microsoft ساخته است. از هر دو محیط مجازی/conda و همچنین docker (از طریق افزونه‌ی docker) پشتیبانی خوبی دارد و می‌توان آن را با افزونه‌های گوناگون برای Test کردن، لینت کردن، قالب‌بندی و توسعه‌ی وب گسترش داد.

Python برای VS Code

شناسه‌ی افزونه: ms-python.python

سرصفحه‌ی افزونه‌ی Python در VS Code

افزونه‌ی Python از Microsoft افزونه‌ی رسمی Microsoft برای Python در VS Code است و نصب آن به‌شدت توصیه می‌شود. این افزونه ویژگی‌های گسترده‌ای دارد، از جمله مدیریت محیط، مدیریت Test، لینت کردن و debug کردن. از آخرین نسخه به بعد، نصب افزونه‌ی Python از Microsoft، pylance (بسته‌ی محبوبی برای لینت کردن و اعتبارسنجی Code Python) و jupyter (برای کار با Jupyter Notebook) را هم دانلود می‌کند.

  • یک آموزش راه‌اندازی اینجا در دسترس است و مرجع تنظیمات بسیار کمک‌کننده است.
  • اطلاعات مربوط به تنظیم نسخه‌های Python و کار با محیط‌های مجازی را می‌توانید اینجا پیدا کنید.
  • اطلاعات مربوط به راه‌اندازی و کار با unittest و pytest در VS Code را می‌توانید اینجا پیدا کنید.

PyCharm

PyCharm یک IDE (محیط توسعه‌ی یکپارچه) است که JetBrains آن را ساخته است. این ابزار به‌طور ویژه برای Python ساخته شده و میان حرفه‌ای‌ها محبوب است. مانند VS Code، می‌توان آن را با افزونه‌ها، پوسته‌ها و قالب‌بندهای مختلف رایگان و غیررایگان گسترش داد. نسخه‌ی پولی آن هم از توسعه‌ی Django، توسعه‌ی Docker و یکپارچه‌سازی با پایگاه داده پشتیبانی می‌کند.

Pycharm و Pytest
  • مراحل راه‌اندازی pytest با pycharm را می‌توانید اینجا پیدا کنید.
  • pycharm به‌طور پیش‌فرض از unittest استفاده می‌کند، پس باید pytest را در محیطی که با pycharm استفاده می‌کنید نصب کرده باشید (به سندهای مفسر و محیط در بالا نگاه کنید) و سپس pycharm را به آن اشاره دهید.
  • اجرای Testها مستقیماً از رابط گرافیکی واقعاً آسان است، اما فراموش نکنید که نگاهی دقیق به پارامترهای pytest بیندازید تا مطابق میل شما تنظیم شود.
  • مستندات کلی برای اجرای Testها و debug کردن در pycharm را می‌توانید اینجا پیدا کنید.
  • ابزارها و راهنمایی‌های بیشتر برای debug کردن را می‌توانید اینجا پیدا کنید.
    • هشدار: افزونه‌ی coverage برای pytest، debugger مربوط به pycharm را از کار می‌اندازد. برای اطلاعات بیشتر پیکربندی اجرا/debug: pytest را ببینید.

Spyder IDE

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

Spyder از محیط‌های venv و conda به‌طور کامل پشتیبانی می‌کند. این ابزار شامل یک پایانه‌ی تعاملی IPython، یک debugger تعاملی و پشتیبانی غنی برای رسم نمودار و کاوش داده درون ویرایشگر است. تکمیل خودکار Code و لینت کردن بیشتر از طریق kite فراهم می‌شود. یکپارچه‌سازی با Jupyter Notebook و ابزارهای Test از طریق افزونه‌هایی که جامعه توسعه داده‌اند فراهم می‌شود. همچنین می‌توانید با استفاده از API مربوط به Spyder، افزونه‌های خودتان را بنویسید.


Emacs

Emacs یک ویرایشگر متن رایگان، متن‌باز و به‌شدت قابل‌سفارشی‌سازی است که با Lisp نوشته شده است. یک راهنمای نصب و راه‌اندازی عالی در Real Python در دسترس است.

  • Emacs Wiki هم راهنمای خوبی برای برنامه‌نویسی Python با Emacs دارد.
  • Full Stack Python نیز اطلاعات و پیوندهای خوبی برای شروع کار با Emacs گرد آورده است.

Vim

Vim نسخه‌ی رایگان و «بهبودیافته»ی ویرایشگر متن استاندارد Unix یعنی vi است. این ویرایشگر روی طیف گسترده‌ای از سیستم‌های عامل و توزیع‌های Linux/Unix در دسترس است. یک راهنمای نصب و راه‌اندازی عالی در Real Python در دسترس است و برگه‌های تقلب مفیدی در vimsheet، glump و rtorr موجود است.

حتی اگر تصمیم بگیرید که ویرایش Code Python در vim مناسب شما نیست، توصیه می‌شود با مجموعه‌ای پایه از فرمان‌ها آشنا شوید. vim یا vi اغلب ویرایشگر متن «پایه» یا «پیش‌فرض» در توزیع‌های Linux و Unix است و در آن سیستم‌ها ویرایشگر پیش‌فرض برای پیام‌های commit مربوط به git است (از جمله موارد دیگر). احتمال زیادی دارد که روزی روی یک سیستم *nix باشید و بخواهید پرونده‌ی پیکربندی‌ای را ویرایش کنید که تنها vi در دسترس است؛ پس دانستن اینکه چگونه از vim خارج شویم (دست‌کم) دفاع شخصی خوبی است.


Spacemacs

Spacemacs (مخزن GitHub) یک توزیع رایگان و جامعه‌محور از Emacs است که کارکردهای Emacs و Vim را با هم ترکیب می‌کند.

  • مستندات رسمی را می‌توانید اینجا پیدا کنید
  • این راهنما در opensource مروری سریع بر گزینه‌های نصب و پیکربندی ارائه می‌دهد.
  • لایه‌ی python در spacemacs کارکردهایی برای Test کردن، لینت کردن، مدیریت محیط و قالب‌بندی Code اضافه می‌کند.

Sublime text

Sublime text یک ویرایشگر متن پرداختی برای برنامه‌نویسی است که Sublime HQ Pty Ltd ساخته است. این ویرایشگر شبیه VS Code و Atom است و بسته‌ها و افزونه‌های زیادی برای سفارشی‌سازی دارد. همچنین می‌توانید با Python افزونه‌های خودتان را برای این ویرایشگر توسعه دهید.