- PVSM.RU - https://www.pvsm.ru -

Полезные инструменты Python

Друзья, добрый вечер! У нас отличные новости, открыт набор в новую группу по курсу «Разработчик Python» [1]. Группа стартует уже в начале июля, а прямо сейчас, по устоявшейся традиции, мы делимся полезным переводом подготовленным для студентов данного курса.

Полезные инструменты Python - 1

Когда вы только начинаете учить Python, кто-то объясняет вам, что вы можете добавить свою папку с исходниками в переменную среды PYTHONPATH и тогда ваш код можно будет импортировать из других директорий. Очень часто объясняющий забывает сказать, что в большинстве случаев – это плохая идея. Некоторые люди узнают это в интернете, другие просто понимают на собственном опыте. Но слишком большое количество людей (особенно неопытные программисты), думают, что других альтернатив быть не может.

Эта статья в основном для них, поскольку даже если вы знаете, что существует альтернатива, не всегда бывает просто принять ее и начать использовать. Инструменты Python сбивают с толку, поскольку они представляют из себя большое количество программного обеспечения, построенного одно на основе другого, с большим количеством пересечений и проблем, возникающих из-за этого. Непросто понять, как эти инструменты правильно использовать в своем проекте.

По этой причине я решил написать эту статью и рассмотреть в ней самые популярные инструменты, разобраться когда и где они используются и какие задачи решают. Я попробую объяснить на пальцах как стоит применять каждый из этих инструментов. Если инструмент есть в этом списке, значит, вам, как питонисту, нужно хотя бы знать о его существовании. Я буду рассказывать лишь о тех инструментах, которые могут быть применены для любого проекта или рабочего процесса, и вам следует помнить о них, когда вы начинаете новый проект. Однако это не значит, что вам следует использовать все представленные инструменты в каждом своем проекте. Излишне перегружать проект инструментами, в некоторых случаях это может усложнить его поддержку.

Базовые инструменты

Setuptools

Setuptools [2] – стандартный способ создавать пакеты в Python. Он работает где угодно и хорошо справляется со своей задачей.

Для чего: создание egg, zip или wheel файлов из исходников, определение метаданных для вашего проекта, совместная структурированная и стандартизированная работа над кодом.
Когда используется: Всегда, когда вы пишете код, который должен запускаться на чьей-либо другой машине.
Альтернативы: Poetry, Flit

virtualenv

Virtualenv [3] – менеджер виртуальной среды. Такие изолированные среды представляют собой автономно установленный python с определенным набором предустановленных пакетов. Использование virtualenv означает, что вам не нужно устанавливать пакеты в python системы по умолчанию.

Для чего: разделение зависимостей, поддержка различных версий python одной системой, легкое перемещение зависимостей.
Когда используется: Вам нужно написать код, а для этого нужна версия python отличающаяся от вашей системной версии python по умолчанию.
Альтернативы: Docker или нечто подобное.

Pip

Pip [4] – наиболее распространённый менеджер пакетов в python. Он позволяет устанавливать локальные или удаленные пакеты в вашу виртуальную среду или Python системы.

Для чего: установка и удаление пакетов, отслеживание версий пакетов, которые вы используете.
Когда используется: Всегда.
Альтернативы: Poetry, Conda

Создание пакетов и их распространение

Для более тщательного ознакомления у python.org есть отдельная страница: packaging.python.org [5]

distutils

distutils [6] – это предшественник setuptools. Последний активно использует функционал distutils, поэтому нередко приходится взаимодействовать именно с этим инструментом. Distutils – это не совсем тот инструмент, который вы должны иметь в своем арсенале, но вы должны знать, каким образом он вписывается в общую картину.

Pypi

Pypi [7] или Python Package Index — это большой репозиторий, в котором собраны все ваши самые любимые модули Python. Например, тот же самый pip берет билды пакетов именно оттуда.

Для чего: Для публикации вашего кода.
Когда используется: Когда существует пакет, который вы хотите показать сообществу.

Pypiserver

Pypiserver [8] – это одна из реализаций Package Index API, используемая Pypi. Вы можете создать собственный репозиторий, например, для всей вашей компании и публиковать пакеты не делая публичных релизов.

Для чего: Создание собственных репозиториев внутри организации.
Когда используется: Когда вашему коду не нужна публичная огласка, но над ним нужен полный контроль.
Альтернативы: Warehouse (используется Pypi), djangopypi

Poetry

Poetry [9] является альтернативной системой работы с пакетами, которая заменяет setuptools, pip и некоторые другие инструменты, построенные на их основе. Это попытка полностью пересмотреть то, как работает система пакетов в Python. На настоящее время poetry имеет множество положительных отзывов, но не является самым распространённым инструментом.

Для чего: обработка и распространение пакетов, управление зависимостями, предотвращение проблем с разрешением зависимостей.
Когда используется: Когда у вас намечается новый проект и вы не боитесь использовать узкоспециализированные инструменты.
Альтернативы: Pipenv

Pipenv

Pipenv [10], подобно Poetry, является инструментом для структурирования зависимостей и конфигурации проектов на Python более вменяемым способом. С помощью Pipfile он управляет зависимостями вашего проекта и обеспечивает согласованность и простоту использования.

Для чего: обработка и распространение пакетов, управление зависимостями.
Когда используется: вам нужен инструмент вроде Poetry, который вызовет меньше вопросов.
Альтернативы: Poetry.

Документация

Sphinx

Sphinx [11] – инструмент для создания документации. Изначально он был создан для обработки документации Python, но стал инструментом общего пользования. Он является наиболее распространенным вариантом для проектов на Python.

Для чего: создание PDF-или HTML-документов с помощью языка разметки из reStructuredText источников.
Когда используется: Когда вашему проекту, API или коду требуется внешняя документация.
Альтернативы: Docutils, Doxygen

autodoc

autodoc [12] — это фундаментальное расширение для Sphinx, которое позволяет создавать reStructuredText файлы из исходного кода на Python с подписями для каждого класса, функции, модуля и так далее.

Для чего: документирование вашего кода или API.
Когда используется: Фактически, каждый раз, когда вы используете Sphinx.
Альтернативы: autosummary

Тестирование

py.test

py.test [13] – по моему мнению, является лучшим пакетом для тестирования на Python. У него множество функций, хотя не все из них раскрыты должным образом, поэтому некоторое время займет поиск всех возможностей, которые предоставляет py.test.

Для чего: тестирование вашего кода.
Когда используется: Всегда, когда вам лень тестировать вручную.
Альтернативы: unittest, nose

Hypothesis

Hypothesis [14] – это инструмент для тестирования отдельных свойств. Короче говоря, он генерирует случайные сценарии тестирования в соответствии с вашими спецификациями, пока не найдет сценарий, при котором тест не проходит успешно. Потратьте некоторое время на изучение принципов, прежде чем начинать использовать этот инструмент.

Для чего: тестирование кода, в особенности обработки данных.
Когда используется: Когда нужно протестировать нетривиальную логику широким спектром входных значений (числа, строки, структурированные данные).

tox

tox [15] представляет из себя менеджер виртуальной среды для тестирования. Это значит, что вы сможете настроить его для выполнения тестов в чистых, настраиваемых виртуальных средах, чтобы гарантировать, что ваш код сможет работать в различных условиях.

Для чего: для кода, который должен запускаться в различных условиях и средах. Также полезен для CI.
Когда используется: Когда нужно, чтобы ваш код поддерживался различными версиями Python, запускался в различных средах и на разных операционных системах.
Альтернативы: bash scrips, CI pipelines

Другие инструменты

pyenv

pyenv [16] – менеджер версий python. Он направлен на упрощение локального рабочего процесса разработчиков при работе с несколькими версиями.

Для чего: запуск различных проектов разными версиями Python.
Когда используется: Вам нужно работать с глобальными версиями Python и у вас их много.
Альтернативы: manual management, virtualenv, Poetry, Pipenv

PyScaffold

PyScaffold [17] — это инструмент для инициализации структуры проекта стандартизированным способом и предоставления некоторых из перечисленных выше инструментов без необходимости настраивать их вручную. Очень гибкий.

Для чего: для загрузки проектов, работы с несколькими проектами с одинаковым инструментарием и структурой.
Когда используется: всегда (если вы знакомы с этим инструментом, но не пытайтесь впервые его использовать, когда вы спешите)
Альтернативы: python-project-template, Cookiecutter

flake8

flake8 [18] – один из самых популярных линтеров для Python. Он запускает различные сценарии для проверки соответствия вашего кода требованиям руководства по стилю Python (PEP-8 [19]).

Для чего: проверка вашего проекта на хороший стиль написания кода.
Когда используется: каждый раз, когда ваш проект должен быть прочитан кем-то или вами же.
Альтернативы: pylint

Black

Black [20] автоматически форматирует код. Это значит, что вместо того, чтобы просто проверить ваш код на соответствие стандартам, Black самостоятельно изменит его, чтобы он им соответствовал.

Для чего: автоматическое форматирование кода.
Когда используется: Когда у вас нет проблем с тем, чтобы отказаться от ручного управления вашим кодом.
Альтернативы: autopep8, yapf

На этом все. Ждем ваши комментарии ;-).

Автор: MaxRokatansky

Источник [21]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/321223

Ссылки в тексте:

[1] «Разработчик Python»: https://otus.pw/2ns0/

[2] Setuptools: https://setuptools.readthedocs.io/en/latest/

[3] Virtualenv: https://virtualenv.pypa.io/en/latest/

[4] Pip: https://pip.pypa.io/en/stable/installing/

[5] packaging.python.org: https://packaging.python.org/

[6] distutils: https://docs.python.org/3/library/distutils.html

[7] Pypi: https://pypi.org/

[8] Pypiserver: https://pypiserver.readthedocs.io/en/latest/

[9] Poetry: https://github.com/sdispater/poetry

[10] Pipenv: https://github.com/pypa/pipenv

[11] Sphinx: http://www.sphinx-doc.org/en/master/

[12] autodoc: http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html

[13] py.test: https://docs.pytest.org/en/latest/

[14] Hypothesis: https://hypothesis.readthedocs.io/en/latest/

[15] tox: https://tox.readthedocs.io/en/latest/

[16] pyenv: https://github.com/pyenv/pyenv

[17] PyScaffold: https://pypi.org/project/PyScaffold/

[18] flake8: https://github.com/PyCQA/flake8

[19] PEP-8: https://www.python.org/dev/peps/pep-0008/

[20] Black : https://github.com/ambv/black

[21] Источник: https://habr.com/ru/post/456624/?utm_campaign=456624&utm_source=habrahabr&utm_medium=rss