company_banner

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

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



Когда вы только начинаете учить 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

На этом все. Ждем ваши комментарии ;-).
OTUS. Онлайн-образование
763,53
Цифровые навыки от ведущих экспертов
Поделиться публикацией

Похожие публикации

Комментарии 38

    0
    Добрый вечер. Наслышан о ваших курсах. Грешен признаюсь для ознакомления скачал ваш курс по питону с одного ресурса, теперь хочу уточнить, у вас занятия действительно в виде вебинара по 2 — 2.5 часа? Не кажется ли вам, что это тяжеловато усваивать? В каком формате у вас проходят занятия?
      0

      Доброй ночи. Да, занятия действительно проходят в формате живых вебинаров (не запись). Можете оставить свои контакты, например в личных сообщениях, свяжемся с Вами в рабочее время и подробно ответим на интересующие вопросы.

        0
        Живые вебинары — это замечательно. Но запись будет, если пропустил?
          0
          Да, конечно, запись каждого занятия остается в личном кабинете. Более того, при поступлении в группу, Вас добавляют в закрытую группу Slack, где практически круглосуточно можно получить рекомендации преподавателей, а также обсудить что-либо с коллегами.
      +1
      Норм подборка, все, чем пользуюсь, есть в списке. Некоторыми не пользовался — надо глянуть.
        0
        Полностью с Вами согласен. Пожалуй, гляну на PyScaffold.
        0
        Docker альтернатива virtualenv? Вы серьезно?
          +4
          А что не так? Если вы пакуете в Docker, зачем вам теперь virtualenv? (подразумевая, что в мире микросервисов каждый проект в отдельном контейнере и нет надобности разделять по разным энвам, а значит можно всегда использовать базовый).
            –1
            Хотя бы то что это инструмент призванный решать более глобальные проблемы чем разделять окружение в Python.
              +2

              это не делает его "не альтернативой" virtualeнв'у

                –1
                (это не я вас минусую)
                Вы не ответили на вопрос «Если вы пакуете в Docker, зачем вам теперь virtualenv?». Потому что ответ на этот вопрос есть ответ, является ли Docker альтернативой.

                Если Docker может больше, то это не отменяет того факта, что он может не меньше, а значит является альтернативой. Даже если его основное предназначение лежит в другой сфере вообще.
              0
              А почему нет? При использовании докера можно не использовать virtualenv. Просто нет никакого смысла.

              [Да уж… надо обновлять комментарии, иначе можно оказаться очень «оригинальным»]
                0

                Не всегда и не везде. А еще это может быть попросту неудобно.
                Но, в целом, — да, docker обычно позволяет больше не возиться с venv.

              0
              Прошел по вашей ссылке. Для регистрации необходимо заполнить два поля. Что в них вводить изначально — непонятно, никаких намеков нет. И только когда начинаешь заполнять чем-нибудь, тогда выскакивает сверху подсказка (кстати, очень маленький шрифт и очень сильно сливается с фоном поля). Поправьте, пожалуйста.
                0
                Попробуйте другой браузер. Пока поле не заполнено, эта подсказка на все поле
                  0
                  Подскажите пожалуйста, в каком браузере возникла проблема?
                    0

                    браузер Firefox 67.0.2х64 + Win 7Profх64. Вот как это окно смотрится у меня:

                      +4
                      может монитор поменять? )
                        0

                        я бы Вас плюсанул, была бы возможность ) Но, увы) А если начать вводить текст, то эти поля смотрятся тоже интересно. Предлагаете поменять на монитор 50+ ?)

                          +2
                          Если честно, не совсем понимаю в чем проблема. Все видно же
                            +1

                            Видно, если начать что-либо писать. Если изначально открывается страничка, то там пусто. Нет никаких подсказок. Только методом "попробовать ввести что-нибудь" становится понятно, что вводить. Я считаю такое поведение формы неправильным и недружелюбным.
                            P.S. Но могу быть неправ, ибо обладаю некоторой долей перфекционизма.

                              +3
                              Нет, серьезно, меняйте монитор. На вашем скриншоте видны подсказки.
                              Думаю, дело в контрастности и(или) яркости.
                                +2

                                Скорее всего, Вы правы. Но, увы, это рабочий. Из-за данной формы мне его не поменяют. :) Вот когда что-то по работе не будет видно, тогда да. Тогда переименую свои претензии: "На недорогих TN-мониторах подсказки в полях формы сливаются с фоном".

                                  +1
                                  Тогда попробуйте настроить. Ну или пишите по работе письма светло-серым, а когда спросят почему такая чушь написана, покажете, что его не видно.
                                    0

                                    Каждый раз, когда вижу странный подбор цветов (тёмно-серый по светло-серому например), я испытываю удивление.

                          0
                          Может, всё-таки, поменять дизайнера?
                          Когда продуктом невозможно пользоваться из-за некритичных неисправностей на клиентской стороне — так себе продукт.
                            0
                            Вы о чем?
                              0

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

                                0
                                Да, естественно мы учтем это и подумаем над изменениями интерфейса. Но, как мы уже выше выяснили, похоже, что проблема действительно в мониторе и, если монитор настолько искажает интерфейс, возможно стоит остро поднять вопрос о его замене, либо настройке.
                                  –1
                                  Это напоминает подход при проектировании какой-нибудь вычурной дизайнерской мебели, которая красиво выглядит в глянце и в магазине, но чтобы ей было удобно пользоваться в быту, надо иметь довольно специфичную анатомию.

                                  «Если ваша анатомия настолько искажает UX нашего кресла, возможно стоит остро поднять вопрос о пластической операции»
                                    –1

                                    Поддержу всех вышеотписавшихся.


                                    Контрастность не вполне удачно подобрана.
                                    И это не проблема монитора (сколько бы плохим он не был), а дизайна.
                                    А еще, не стоит забывать про физические особенности зрения некоторых людей, для них контрастность критически важна. В противном случае они попросту ничего не увидят. Глаза менять пока еще толком не научились.


                                    В конце-концов, это ваш лэндинг, который вам деньги приносит.
                                    На достаточно маленькой выборке у вас есть как минимум один потенциальный клиент, который не смог комфортно зарегистрироваться. Это важный звоночек.

                                      0
                                      Дело может быть не только в мониторе, тут еще может быть и плохое зрение, которое не поменяешь. Обычно я не поднимаю тему неконтрастного дизайна, потому что понимаю, что буду в меньшинстве, но раз уж тут зашел разговор: Вы просто не представляете, какую бурю отрицательных эмоций иногда испытываешь, когда на пустом месте, безо всякой необходимости, просто потому что дизайнер «так видит», не можешь прочитать простой текст, причем в браузере это еще полбеды, там почти всегда что-то можно с этим сделать, но иногда это происходит в интерфейсе какой-то другой программы, и там ситуация может быть намного сложнее. Максимально бесят надписи серым по серому.)
                                        0
                                        Предлагаю сойтись на необходимости создания высококонтрастной темы помимо основной.
                                0
                                Я вам для наглядности
                                картинку сделал


                                Вот у Yuriy_krd надпись левым не видна, а правым — видна. Как вы думаете, проблема дизайнера?
                        0

                        Нам black не зашел. Он реально портит код. А вот yapf — вполне. Как и pre-commit для установки гит хуков

                          0

                          У меня к нему только претензии по длине строки — то он разбивает то, что не нужно, то наоборот. Никак что-то не поборю

                            0

                            к black или yapf?


                            У нас были странности с тем, как он разбивает код вида


                                (
                                    ffmpeg.input(url, rtsp_transport='tcp',
                                                 stimeout=1000).output(str(save_path), **{
                                                     'qmin': 2,
                                                     'qmax': 2,
                                                     'vframes': 1
                                                 }).global_args('-loglevel', 'debug').overwrite_output().run()
                                )
                            

                            Собственно круглые скобки вокруг и есть тот лайф-хак, чтобы форматирование не сбивалось.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое