Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Друзья, добрый вечер! У нас отличные новости, открыт набор в новую группу по курсу «Разработчик Python». Группа стартует уже в начале июля, а прямо сейчас, по устоявшейся традиции, мы делимся полезным переводом подготовленным для студентов данного курса.
Когда вы только начинаете учить Python, кто-то объясняет вам, что вы можете добавить свою папку с исходниками в переменную среды PYTHONPATH и тогда ваш код можно будет импортировать из других директорий. Очень часто объясняющий забывает сказать, что в большинстве случаев – это плохая идея. Некоторые люди узнают это в интернете, другие просто понимают на собственном опыте. Но слишком большое количество людей (особенно неопытные программисты), думают, что других альтернатив быть не может.
Эта статья в основном для них, поскольку даже если вы знаете, что существует альтернатива, не всегда бывает просто принять ее и начать использовать. Инструменты Python сбивают с толку, поскольку они представляют из себя большое количество программного обеспечения, построенного одно на основе другого, с большим количеством пересечений и проблем, возникающих из-за этого. Непросто понять, как эти инструменты правильно использовать в своем проекте.
По этой причине я решил написать эту статью и рассмотреть в ней самые популярные инструменты, разобраться когда и где они используются и какие задачи решают. Я попробую объяснить на пальцах как стоит применять каждый из этих инструментов. Если инструмент есть в этом списке, значит, вам, как питонисту, нужно хотя бы знать о его существовании. Я буду рассказывать лишь о тех инструментах, которые могут быть применены для любого проекта или рабочего процесса, и вам следует помнить о них, когда вы начинаете новый проект. Однако это не значит, что вам следует использовать все представленные инструменты в каждом своем проекте. Излишне перегружать проект инструментами, в некоторых случаях это может усложнить его поддержку.
Setuptools – стандартный способ создавать пакеты в Python. Он работает где угодно и хорошо справляется со своей задачей.
Для чего: создание egg, zip или wheel файлов из исходников, определение метаданных для вашего проекта, совместная структурированная и стандартизированная работа над кодом.
Когда используется: Всегда, когда вы пишете код, который должен запускаться на чьей-либо другой машине.
Альтернативы: Poetry, Flit
Virtualenv – менеджер виртуальной среды. Такие изолированные среды представляют собой автономно установленный python с определенным набором предустановленных пакетов. Использование virtualenv означает, что вам не нужно устанавливать пакеты в python системы по умолчанию.
Для чего: разделение зависимостей, поддержка различных версий python одной системой, легкое перемещение зависимостей.
Когда используется: Вам нужно написать код, а для этого нужна версия python отличающаяся от вашей системной версии python по умолчанию.
Альтернативы: Docker или нечто подобное.
Pip – наиболее распространённый менеджер пакетов в python. Он позволяет устанавливать локальные или удаленные пакеты в вашу виртуальную среду или Python системы.
Для чего: установка и удаление пакетов, отслеживание версий пакетов, которые вы используете.
Когда используется: Всегда.
Альтернативы: Poetry, Conda
distutils – это предшественник setuptools. Последний активно использует функционал distutils, поэтому нередко приходится взаимодействовать именно с этим инструментом. Distutils – это не совсем тот инструмент, который вы должны иметь в своем арсенале, но вы должны знать, каким образом он вписывается в общую картину.
Pypi или Python Package Index — это большой репозиторий, в котором собраны все ваши самые любимые модули Python. Например, тот же самый pip берет билды пакетов именно оттуда.
Для чего: Для публикации вашего кода.
Когда используется: Когда существует пакет, который вы хотите показать сообществу.
Pypiserver – это одна из реализаций Package Index API, используемая Pypi. Вы можете создать собственный репозиторий, например, для всей вашей компании и публиковать пакеты не делая публичных релизов.
Для чего: Создание собственных репозиториев внутри организации.
Когда используется: Когда вашему коду не нужна публичная огласка, но над ним нужен полный контроль.
Альтернативы: Warehouse (используется Pypi), djangopypi
Poetry является альтернативной системой работы с пакетами, которая заменяет setuptools, pip и некоторые другие инструменты, построенные на их основе. Это попытка полностью пересмотреть то, как работает система пакетов в Python. На настоящее время poetry имеет множество положительных отзывов, но не является самым распространённым инструментом.
Для чего: обработка и распространение пакетов, управление зависимостями, предотвращение проблем с разрешением зависимостей.
Когда используется: Когда у вас намечается новый проект и вы не боитесь использовать узкоспециализированные инструменты.
Альтернативы: Pipenv
Pipenv, подобно Poetry, является инструментом для структурирования зависимостей и конфигурации проектов на Python более вменяемым способом. С помощью Pipfile он управляет зависимостями вашего проекта и обеспечивает согласованность и простоту использования.
Для чего: обработка и распространение пакетов, управление зависимостями.
Когда используется: вам нужен инструмент вроде Poetry, который вызовет меньше вопросов.
Альтернативы: Poetry.
Sphinx – инструмент для создания документации. Изначально он был создан для обработки документации Python, но стал инструментом общего пользования. Он является наиболее распространенным вариантом для проектов на Python.
Для чего: создание PDF-или HTML-документов с помощью языка разметки из reStructuredText источников.
Когда используется: Когда вашему проекту, API или коду требуется внешняя документация.
Альтернативы: Docutils, Doxygen
autodoc — это фундаментальное расширение для Sphinx, которое позволяет создавать reStructuredText файлы из исходного кода на Python с подписями для каждого класса, функции, модуля и так далее.
Для чего: документирование вашего кода или API.
Когда используется: Фактически, каждый раз, когда вы используете Sphinx.
Альтернативы: autosummary
py.test – по моему мнению, является лучшим пакетом для тестирования на Python. У него множество функций, хотя не все из них раскрыты должным образом, поэтому некоторое время займет поиск всех возможностей, которые предоставляет py.test.
Для чего: тестирование вашего кода.
Когда используется: Всегда, когда вам лень тестировать вручную.
Альтернативы: unittest, nose
Hypothesis – это инструмент для тестирования отдельных свойств. Короче говоря, он генерирует случайные сценарии тестирования в соответствии с вашими спецификациями, пока не найдет сценарий, при котором тест не проходит успешно. Потратьте некоторое время на изучение принципов, прежде чем начинать использовать этот инструмент.
Для чего: тестирование кода, в особенности обработки данных.
Когда используется: Когда нужно протестировать нетривиальную логику широким спектром входных значений (числа, строки, структурированные данные).
tox представляет из себя менеджер виртуальной среды для тестирования. Это значит, что вы сможете настроить его для выполнения тестов в чистых, настраиваемых виртуальных средах, чтобы гарантировать, что ваш код сможет работать в различных условиях.
Для чего: для кода, который должен запускаться в различных условиях и средах. Также полезен для CI.
Когда используется: Когда нужно, чтобы ваш код поддерживался различными версиями Python, запускался в различных средах и на разных операционных системах.
Альтернативы: bash scrips, CI pipelines
pyenv – менеджер версий python. Он направлен на упрощение локального рабочего процесса разработчиков при работе с несколькими версиями.
Для чего: запуск различных проектов разными версиями Python.
Когда используется: Вам нужно работать с глобальными версиями Python и у вас их много.
Альтернативы: manual management, virtualenv, Poetry, Pipenv
PyScaffold — это инструмент для инициализации структуры проекта стандартизированным способом и предоставления некоторых из перечисленных выше инструментов без необходимости настраивать их вручную. Очень гибкий.
Для чего: для загрузки проектов, работы с несколькими проектами с одинаковым инструментарием и структурой.
Когда используется: всегда (если вы знакомы с этим инструментом, но не пытайтесь впервые его использовать, когда вы спешите)
Альтернативы: python-project-template, Cookiecutter
flake8 – один из самых популярных линтеров для Python. Он запускает различные сценарии для проверки соответствия вашего кода требованиям руководства по стилю Python (PEP-8).
Для чего: проверка вашего проекта на хороший стиль написания кода.
Когда используется: каждый раз, когда ваш проект должен быть прочитан кем-то или вами же.
Альтернативы: pylint
Black автоматически форматирует код. Это значит, что вместо того, чтобы просто проверить ваш код на соответствие стандартам, Black самостоятельно изменит его, чтобы он им соответствовал.
Для чего: автоматическое форматирование кода.
Когда используется: Когда у вас нет проблем с тем, чтобы отказаться от ручного управления вашим кодом.
Альтернативы: autopep8, yapf
На этом все. Ждем ваши комментарии ;-).
Когда вы только начинаете учить Python, кто-то объясняет вам, что вы можете добавить свою папку с исходниками в переменную среды PYTHONPATH и тогда ваш код можно будет импортировать из других директорий. Очень часто объясняющий забывает сказать, что в большинстве случаев – это плохая идея. Некоторые люди узнают это в интернете, другие просто понимают на собственном опыте. Но слишком большое количество людей (особенно неопытные программисты), думают, что других альтернатив быть не может.
Эта статья в основном для них, поскольку даже если вы знаете, что существует альтернатива, не всегда бывает просто принять ее и начать использовать. Инструменты Python сбивают с толку, поскольку они представляют из себя большое количество программного обеспечения, построенного одно на основе другого, с большим количеством пересечений и проблем, возникающих из-за этого. Непросто понять, как эти инструменты правильно использовать в своем проекте.
По этой причине я решил написать эту статью и рассмотреть в ней самые популярные инструменты, разобраться когда и где они используются и какие задачи решают. Я попробую объяснить на пальцах как стоит применять каждый из этих инструментов. Если инструмент есть в этом списке, значит, вам, как питонисту, нужно хотя бы знать о его существовании. Я буду рассказывать лишь о тех инструментах, которые могут быть применены для любого проекта или рабочего процесса, и вам следует помнить о них, когда вы начинаете новый проект. Однако это не значит, что вам следует использовать все представленные инструменты в каждом своем проекте. Излишне перегружать проект инструментами, в некоторых случаях это может усложнить его поддержку.
Базовые инструменты
Setuptools
Setuptools – стандартный способ создавать пакеты в Python. Он работает где угодно и хорошо справляется со своей задачей.
Для чего: создание egg, zip или wheel файлов из исходников, определение метаданных для вашего проекта, совместная структурированная и стандартизированная работа над кодом.
Когда используется: Всегда, когда вы пишете код, который должен запускаться на чьей-либо другой машине.
Альтернативы: Poetry, Flit
virtualenv
Virtualenv – менеджер виртуальной среды. Такие изолированные среды представляют собой автономно установленный python с определенным набором предустановленных пакетов. Использование virtualenv означает, что вам не нужно устанавливать пакеты в python системы по умолчанию.
Для чего: разделение зависимостей, поддержка различных версий python одной системой, легкое перемещение зависимостей.
Когда используется: Вам нужно написать код, а для этого нужна версия python отличающаяся от вашей системной версии python по умолчанию.
Альтернативы: Docker или нечто подобное.
Pip
Pip – наиболее распространённый менеджер пакетов в python. Он позволяет устанавливать локальные или удаленные пакеты в вашу виртуальную среду или Python системы.
Для чего: установка и удаление пакетов, отслеживание версий пакетов, которые вы используете.
Когда используется: Всегда.
Альтернативы: Poetry, Conda
Создание пакетов и их распространение
Для более тщательного ознакомления у python.org есть отдельная страница: packaging.python.org
distutils
distutils – это предшественник setuptools. Последний активно использует функционал distutils, поэтому нередко приходится взаимодействовать именно с этим инструментом. Distutils – это не совсем тот инструмент, который вы должны иметь в своем арсенале, но вы должны знать, каким образом он вписывается в общую картину.
Pypi
Pypi или Python Package Index — это большой репозиторий, в котором собраны все ваши самые любимые модули Python. Например, тот же самый pip берет билды пакетов именно оттуда.
Для чего: Для публикации вашего кода.
Когда используется: Когда существует пакет, который вы хотите показать сообществу.
Pypiserver
Pypiserver – это одна из реализаций Package Index API, используемая Pypi. Вы можете создать собственный репозиторий, например, для всей вашей компании и публиковать пакеты не делая публичных релизов.
Для чего: Создание собственных репозиториев внутри организации.
Когда используется: Когда вашему коду не нужна публичная огласка, но над ним нужен полный контроль.
Альтернативы: Warehouse (используется Pypi), djangopypi
Poetry
Poetry является альтернативной системой работы с пакетами, которая заменяет setuptools, pip и некоторые другие инструменты, построенные на их основе. Это попытка полностью пересмотреть то, как работает система пакетов в Python. На настоящее время poetry имеет множество положительных отзывов, но не является самым распространённым инструментом.
Для чего: обработка и распространение пакетов, управление зависимостями, предотвращение проблем с разрешением зависимостей.
Когда используется: Когда у вас намечается новый проект и вы не боитесь использовать узкоспециализированные инструменты.
Альтернативы: Pipenv
Pipenv
Pipenv, подобно Poetry, является инструментом для структурирования зависимостей и конфигурации проектов на Python более вменяемым способом. С помощью Pipfile он управляет зависимостями вашего проекта и обеспечивает согласованность и простоту использования.
Для чего: обработка и распространение пакетов, управление зависимостями.
Когда используется: вам нужен инструмент вроде Poetry, который вызовет меньше вопросов.
Альтернативы: Poetry.
Документация
Sphinx
Sphinx – инструмент для создания документации. Изначально он был создан для обработки документации Python, но стал инструментом общего пользования. Он является наиболее распространенным вариантом для проектов на Python.
Для чего: создание PDF-или HTML-документов с помощью языка разметки из reStructuredText источников.
Когда используется: Когда вашему проекту, API или коду требуется внешняя документация.
Альтернативы: Docutils, Doxygen
autodoc
autodoc — это фундаментальное расширение для Sphinx, которое позволяет создавать reStructuredText файлы из исходного кода на Python с подписями для каждого класса, функции, модуля и так далее.
Для чего: документирование вашего кода или API.
Когда используется: Фактически, каждый раз, когда вы используете Sphinx.
Альтернативы: autosummary
Тестирование
py.test
py.test – по моему мнению, является лучшим пакетом для тестирования на Python. У него множество функций, хотя не все из них раскрыты должным образом, поэтому некоторое время займет поиск всех возможностей, которые предоставляет py.test.
Для чего: тестирование вашего кода.
Когда используется: Всегда, когда вам лень тестировать вручную.
Альтернативы: unittest, nose
Hypothesis
Hypothesis – это инструмент для тестирования отдельных свойств. Короче говоря, он генерирует случайные сценарии тестирования в соответствии с вашими спецификациями, пока не найдет сценарий, при котором тест не проходит успешно. Потратьте некоторое время на изучение принципов, прежде чем начинать использовать этот инструмент.
Для чего: тестирование кода, в особенности обработки данных.
Когда используется: Когда нужно протестировать нетривиальную логику широким спектром входных значений (числа, строки, структурированные данные).
tox
tox представляет из себя менеджер виртуальной среды для тестирования. Это значит, что вы сможете настроить его для выполнения тестов в чистых, настраиваемых виртуальных средах, чтобы гарантировать, что ваш код сможет работать в различных условиях.
Для чего: для кода, который должен запускаться в различных условиях и средах. Также полезен для CI.
Когда используется: Когда нужно, чтобы ваш код поддерживался различными версиями Python, запускался в различных средах и на разных операционных системах.
Альтернативы: bash scrips, CI pipelines
Другие инструменты
pyenv
pyenv – менеджер версий python. Он направлен на упрощение локального рабочего процесса разработчиков при работе с несколькими версиями.
Для чего: запуск различных проектов разными версиями Python.
Когда используется: Вам нужно работать с глобальными версиями Python и у вас их много.
Альтернативы: manual management, virtualenv, Poetry, Pipenv
PyScaffold
PyScaffold — это инструмент для инициализации структуры проекта стандартизированным способом и предоставления некоторых из перечисленных выше инструментов без необходимости настраивать их вручную. Очень гибкий.
Для чего: для загрузки проектов, работы с несколькими проектами с одинаковым инструментарием и структурой.
Когда используется: всегда (если вы знакомы с этим инструментом, но не пытайтесь впервые его использовать, когда вы спешите)
Альтернативы: python-project-template, Cookiecutter
flake8
flake8 – один из самых популярных линтеров для Python. Он запускает различные сценарии для проверки соответствия вашего кода требованиям руководства по стилю Python (PEP-8).
Для чего: проверка вашего проекта на хороший стиль написания кода.
Когда используется: каждый раз, когда ваш проект должен быть прочитан кем-то или вами же.
Альтернативы: pylint
Black
Black автоматически форматирует код. Это значит, что вместо того, чтобы просто проверить ваш код на соответствие стандартам, Black самостоятельно изменит его, чтобы он им соответствовал.
Для чего: автоматическое форматирование кода.
Когда используется: Когда у вас нет проблем с тем, чтобы отказаться от ручного управления вашим кодом.
Альтернативы: autopep8, yapf
На этом все. Ждем ваши комментарии ;-).