Корисні інструменти для локальної розробки

Корисні інструменти, які допоможуть розробляти код Python для Exercism на власному компʼютері.


Note

Це зібрання інструментів, популярних у нашій спільноті. Воно не претендує на роль припису чи вичерпного переліку. Ми вважаємо, що ці інструменти добре справляються зі своїм завданням, але, безперечно, є й інші хороші інструменти. Якщо є рекомендація щодо редактора, IDE, інструменту чи плагіна, додайте її до цього документа на GitHub.



Перш ніж вирушити далі, переконаймося, що в нас встановлено свіжу версію Python. Вебплатформа Exercism наразі підтримує Python 3.10 - 3.13.5 (вправи та тести) і Python 3.13.5 (інструментарій). Наш онлайн-засіб запуску тестів наразі використовує pytest 8.4.0 і pytest-subtests 0.14.2. Наш онлайн-аналізатор використовує pylint 4.0.4. Використання інших версій Python, pytest чи pylint локально може дати інші результати, ніж на сайті. Докладніше дивіться в розділі Встановлення Python локально.


Віртуальні середовища

Віртуальні середовища Python забезпечують легке середовище виконання та ізоляцію пакетів. Вони допомагають упорядковувати проєкти, тримаючи всі встановлені пакети Python разом в одному каталозі середовища. Різні середовища можуть містити різні версії середовища виконання Python разом із залежностями проєкту чи бібліотеки. Це допомагає уникати помилок і несумісностей, спричинених оновленням бібліотеки для одного проєкту, яке «ламає» залежність в іншому.

Сьогодні використовують багато інструментів віртуальних середовищ і подібних до них, а також дедалі більше поширюється рух за використання вбудованих метаданих скриптів, dev-контейнерів чи docker замість віртуальних середовищ. Важливо спробувати різні стратегії й знайти ту, що відповідає стилю розробки та потребам проєкту. Не варто вважати, що описані тут стратегії підходять усім або що це єдині варіанти. Щоб отримати загальніший огляд інструментів, не згаданих тут, зазирнімо до цього допису в блозі Баса Нійголта і не втрачаймо цікавості.

Тут ми розглянемо три основні інструменти віртуальних середовищ: venv зі стандартної бібліотеки Python, сторонній conda env, що використовує менеджер пакунків conda і (зазвичай) дистрибутив Python Anaconda, та сторонній інструмент uv, який замінює pip + venv. Усі три досить прості у використанні та/або встановленні.

Крім того, PyEnv, Poetry і virtualenvwrapper допомагають керувати кількома версіями Python та кількома середовищами Python на одній машині.


Створення віртуального середовища за допомогою venv

Щоб створити віртуальне середовище за допомогою venv, перейдімо командою cd до каталогу, у якому зберігатимемо середовища. Це має бути каталог, окремий від коду проєкту, і такий, який ми не додаватимемо до системи контролю версій. Далі виконаймо команду 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. Однак радимо використовувати командні рядки cmd або powershell з Anaconda замість додавання conda до PATH:

(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 - це форк популярних інструментів rbenv/ruby-build, адаптований для Python. По суті, це набір скриптів і проміжних обгорток, які дають змогу задавати версії Python як глобально, так і для окремого користувача. Він намагається дотримуватися уніксової традиції інструменту з єдиним призначенням, ненавʼязливого й такого, що добре робить одну справу.

pyenv і документацію pyenv можна знайти на GitHub.



Редактори та IDE



Visual Studio Code

Visual studio code (VS Code) - це безкоштовний редактор коду, створений Microsoft. Він має чудову підтримку як віртуальних середовищ і середовищ conda, так і docker (через плагін docker), а також його можна розширювати багатьма різними плагінами для тестування, лінтингу, форматування і веброзробки.

Python для VS Code

Ідентифікатор розширення: ms-python.python

Заголовок розширення Python у VS Code

Розширення Python від Microsoft - це офіційне розширення Python для VS Code, яке ми дуже радимо встановити. Воно має широкий набір можливостей, зокрема керування середовищами, керування тестами, лінтинг і налагодження. Починаючи з останнього випуску, встановлення розширення MS Python також завантажить pylance (популярний пакунок для лінтингу й перевірки коду Python) і jupyter (для роботи з Jupyter Notebooks).

  • Посібник із налаштування доступний тут, а довідник налаштувань дуже допомагає.
  • Інформацію про налаштування версій Python і роботу з віртуальними середовищами можна знайти тут.
  • Інформацію про налаштування й роботу з unittest і pytest у VS Code можна знайти тут.

PyCharm

PyCharm - це IDE (інтегроване середовище розробки) від JetBrains. Його створено спеціально для Python, і він популярний серед професіоналів . Як і VS Code, його можна розширювати різними платними й безкоштовними плагінами, темами та форматувальниками. Платна версія також підтримує розробку з Django, розробку з Docker і інтеграцію з базами даних.

PyCharm і Pytest
  • Кроки з налаштування pytest у PyCharm можна знайти тут.
  • PyCharm типово використовує unittest, тому треба мати pytest, встановлений у середовищі, яке використовуємо разом із PyCharm (див. документи про інтерпретатор і середовище вище), а потім вказати PyCharm на нього.
  • Запуск тестів безпосередньо із графічного інтерфейсу дуже простий, але не забуваймо добре роздивитися відповідні параметри pytest, щоб налаштувати все на свій смак.
  • Загальну документацію про запуск тестів і налагодження в PyCharm можна знайти тут.

Spyder IDE

Spyder - це кросплатформне безкоштовне IDE з відкритим кодом для Python, створене для наукової спільноти. Його зазвичай включають до дистрибутива Python Anaconda, але його можна встановити окремо і використовувати з будь-якою версією Python. Радимо окреме встановлення, щоб забезпечити максимальну гнучкість і уникнути конфліктів пакетів.

Spyder повністю підтримує середовища venv і conda. Він містить вбудований інтерактивний термінал IPython, інтерактивний налагоджувач і багату підтримку побудови графіків та дослідження даних у редакторі. Додаткове автодоповнення коду й лінтинг забезпечує kite. Інтеграцію з Jupyter Notebooks і інструментами тестування забезпечують плагіни, розроблені спільнотою. Можна також писати власні плагіни, використовуючи 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.

Навіть якщо вирішимо, що редагування коду Python у vim не для нас, радимо ознайомитися з базовим набором команд. vim або vi часто є «базовим» чи «типовим» текстовим редактором у дистрибутивах Linux і Unix, а також типовим редактором для повідомлень комітів git (серед іншого) у цих системах. Цілком імовірно, що ми опинимося в *nix-системі й муситимемо відредагувати файл конфігурації, маючи під рукою лише vi, тож уміння вийти з vim (принаймні) стане непоганим самозахистом.


Spacemacs

Spacemacs (репозиторій на github) - це безкоштовний дистрибутив Emacs, який розвиває спільнота і який поєднує функціональність Emacs і Vim.

  • Офіційну документацію можна знайти тут
  • Цей посібник на opensource дає короткий огляд встановлення й параметрів налаштування.
  • Шар python у Spacemacs додає функціональність для тестування, лінтингу, керування середовищами й форматування коду.

Sublime text

Sublime text - це платний текстовий редактор для програмування від Sublime HQ Pty Ltd. Він схожий на VS Code і Atom і має багато пакунків і плагінів для персоналізації. Можна також розробляти власні плагіни для цього редактора мовою Python.