Недавно на работе я участвовал в учебной группе для разработчиков, новых в Python, и я понял, что инструменты, для которых я использовал, довольно сбивают с толку новичков:
- Многие из них имеют очень похожие имена, но делают разные вещи, так что их легко запутать в повседневной беседе (Virtualenv, Venv, Pyenv, Pipenv)
- Нет одного, очевидного способа выполнения повседневных задач развития
- Есть много активной разработки в отношении инструментов упаковки Python, поэтому лучший способ сделать что -то сегодня, вероятно, не будет лучшим способом за один или два года
- Если вы Google, вам нужно пройти через много дата информация
Из -за этого я решил продемонстрировать несколько разных инструментов, чтобы дать представление о том, какие инструменты доступны и почему вы, возможно, захотите их использовать. Вы можете прочитать все мои заметки о GitHub Анкет
Несколько разработчиков, с которыми я работаю, знакомы с Руби, и я понял, что мой рабочий процесс разработки в основном идентичен на Python и Ruby, поэтому я собрал этот розеттский камень для Ruby и Python Tools:
Рубигем | Централизованный репозиторий пакета | Пипи |
Gem установить бундлер | Установите пакет | PIP установить Pipenv |
Gemspec | Укажите метаданные и зависимости для пакета | setup.py |
Gemfile | Укажите зависимости для приложения | Пипенв |
Gemfile.lock | Закрепленные версии для полного дерева зависимости приложения | Pipenv.lock |
Установка пучка | Установите пакеты для проекта | PIPENV УСТАНОВКА |
Rbenv | Управлять несколькими версиями интерпретатора | Pyenv |
пакет init | Запустите новый проект приложения | Pipenv -Питон 3.7 |
БУДЕЛА | Генерировать скелет с пакетом | ?? ? |
rspec | Популярная структура тестирования | питест |
Рубкоп | Популярный инструмент Linting | Flake8 |
Связывание.pry | Встроенный в отладчик | точка останова () (3,7+) |
Я также научился некоторым новым вещам сам, подготовясь к этой демонстрации:
В современных версиях Python вы можете просто использовать python -m venv
Чтобы создать виртуально. Таким образом, вам больше не нужно устанавливать инструмент через PIP (ура).
Инструменты, такие как Pipenv
Используйте VirtualEnvs под капюшоном, чтобы вам не нужно было управлять ими самостоятельно. Что здорово, потому что до тех пор, пока проекты изолированы друг от друга, кто заботится о том, куда установлены пакеты?
Если PEP 582 принимается, тогда вместо использования VirtualEnvs в каталоге проекта будет стандартная папка, в которую могут быть установлены пакеты, что немного похоже на node_modules
в JavaScript.
Для моей демонстрации я хотел упомянуть альтернативные инструменты, даже если я не использовал их лично. Я осознавал, что пока Pipenv кажется, является направлением путешествия , есть также много Страх, неопределенность и сомнение об этом в Интернете.
Мне было любопытно посмотреть, влияет ли это на усыновление, поэтому я использовал PYPI Downloads DataSet в Google BigQuery, чтобы подсчитать количество загрузок для нескольких инструментов:
Примечание: точка данных на февраль не целый месяц, и это считается всеми загрузками, даже если пакет загружается как зависимость другого инструмента
Хотя есть определенно другие претенденты, Pipenv по -прежнему кажется приличным выбором, если вы начинаете новый проект Python в 2019 году.
Одной из задач, на которой я хотел сосредоточиться на этой демонстрации, было обновление зависимости проекта. Это важно, потому что невозможность не отставать от обновлений пакетов является формой технического долга. Он накапливается, и со временем становится трудно что -либо обновлять.
Это особенно проблематично, когда вы зависите от таких рамок, как Django или Flask. Использование версий программного обеспечения с известными уязвимостями является вторым самым высоким риском безопасности приложений в соответствии с OWASP TOP 10 2017 Анкет
Чтобы иметь возможность управлять зависимостями с течением времени, вы должны иметь возможность отделить информацию о том, что на самом деле заботится ваше приложение (прямые зависимости) от полного графика зависимостей в любой момент времени.
Первое все о Гибкость – Вы хотите определить, как ваше приложение может измениться по мере выпуска новых версий ваших зависимостей. Это то, что Pipenv
Файл для. Последнее все о Конкретность – Это гарантирует, что вы запускаете один и тот же код на разных машинах. Это то, что Pipenv.lock
Файл для. В качестве примера я использую Pipenv, но это применяется независимо от инструмента, который вы используете.
Python представил синтаксис для описания требований к версии еще в PEP 440 Анкет Если библиотека следует Семантическое управление версией , тогда вы можете написать что -то вроде Запросы ~ = 2,2
означать любую версию, больше или равную 2.2
, но меньше 3
Анкет Если вы хотите быть строгим, вы можете использовать Запросы ~ = 2.2.1
что означает что -то большее или равное 2.2.1
но меньше 2.3
(то есть вы будете принимать только исправления ошибок).
Если вы следуете этому шаблону, то обычные обновления для применения исправлений ошибок и исправлений безопасности могут быть полностью автоматизированы. Я большой поклонник DEVIVEBOT Потому что это делает всю скучную работу для вас: он отслеживает изменения в ваших зависимостях, а затем создает запросы на то, чтобы вы просмотрели.
Оригинал: “https://dev.to/matmooredev/making-sense-of-pythons-development-tools-in-2019-2fak”