Python зависимость. Как правильно управлять своим окружением

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Привет! Я — Владислав Репин, Python developer & Data Engineer в NIX.

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

Что такое зависимость? В Python и многих языках программирования под словом зависимость подразумевают набор компонентов, которые требуются Вам для работы с проектом. Когда Гвидо ван Россума на лекции спросили про зависимости в Python, Гвидо сказал, что зависимости во всех языках — это хаос, он старается туда не лезть и доверяет сообществу решить эту проблему.

В этой статье мы рассмотрим и разберемся с самых азов того, что же такое пакеты, зависимости и окружения в Python и как правильно управлять своим виртуальным окружением. Мы рассмотрим менеджер пакетов — pip, менеджер виртуального окружения — virtualenv, менеджер версий Python — pyenv и более продвинутый функционал, который совмещает в себе менеджер пакетов и виртуальных окружений — pipenv и conda.

В Python под набором компонентов мы подразумеваем набор пакетов. Пакет в Python — это каталог с набором модулей, которые содержат в себе определенный функционал. Другими словами, пакет позволяет иерархически структурировать пространство модулей.

Python поставляется по принципу все включено (Batteries Included) Это означает, что Python standard library включает обширный набор пакетов и модулей, помогающих разработчикам в работе со своими скриптами и приложениями.

Также у Python очень активное сообщество, которое создает еще большее количество пакетов для различных задач. Эти пакеты публикуются в Python Package Index известном, как PyPI (произносится Pie Pea Eye). PyPI содержит обширную коллекцию пакетов, включающих среды разработки, инструменты и библиотеки.

Все это помогает нам с нашими потребностями в повседневных задачах. Многие пакеты упрощают разработку и предоставляют дружественные интерфейсы для функций.

Как было сказано ранее, зависимости — это хаос, обусловленный тем, что многие пакеты имеют свои зависимости, которые могут конфликтовать между собой.

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

pip

Это стандартный менеджер пакетов для Python. Он позволяет устанавливать и управлять дополнительными пакетами, не входящими в Python standard library. Управление пакетами настолько важно, что pip был включен в установщик Python, начиная с версий 3.4 для 3-го Пайтона и 2.7.9 для 2-го Пайтона. Также он используется во многих проектах Python, что делает его необходимым инструментом для каждого Python разработчика

Менеджеры окружений

Очень часто в разработке проектов возникает необходимость работы с определенными версиями пакетов и библиотек. У каждой из них есть свои особенности, необходимые тому или иному проекту. С ростом количества проектов растет и количество пакетов. Возникает конфликт зависимостей каждого из проектов друг с другом, поскольку при установке пакета в среду последняя версия всегда будет замещать младшую. Так появились виртуальные окружения. По своей сути виртуальное окружение — это изолированная часть вашей среды, в которой располагаются все необходимые вам для работы с текущим проектом пакеты и зависимости.

virtualenv

Это одни из самых популярных инструментов, позволяющих создавать виртуальные окружения. Он прост в установке и использовании. Этот инструмент нужно обязательно освоить, как минимум, потому что описание развертывания и использования многих систем, созданных с использованием Python, включает в себя процесс создания виртуального окружения с помощью virtualenv.

pyenv

Все пакеты работают в скоупе с Python, дополняя его функционал набором готовых функций и библиотек. Python также имеет набор различных версий со своими особенностями.

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

pipenv

Многие для управления Python окружением до сих пор используют pip и virtualenv. Это удобные базовые инструменты со своими преимуществами и недостатками. Но прогресс не стоит на месте. Pipenv совмещает в себе функционал этих двух инструментов.

Основные возможности pipenv:

  • создание и управление виртуальным окружением;
  • синхронизация пакетов в Pipfile при установке и удалении пакетов;
  • автоматическая подгрузка переменных окружения из .env файла

В качестве показательного примера сравним использование pip и virtualenv с pipenv для создания виртуального окружения:

При установке пакета с помощью pipenv обратите внимание, что создаются два файла: Pipfile и Pipfile.lock:

Pipfile предназначен для замены requirements.txt. Pipenv в настоящее время является эталонной реализацией использования Pipfile. Возможно, когда-то сам pip сможет обработать эти файлы. Стоит отметить, что Pipenv является официальным инструментом управления пакетами, рекомендованным самими разработчиками Python.

Синтаксис Pipfile — это TOML, где файл поделен на разделы. В идеале в Pipfile не должно быть никаких субзависимостей. Под этим я подразумеваю, что вы должны включать только те пакеты, которые вы на самом деле импортируете и используете. Нет необходимости хранить chardet в вашем Pipfile только потому, что он является зависимостью requests. (Pipenv должен устанавливать его автоматически.) Pipfile должен хранить только зависимости верхнего уровня, необходимые для вашего проекта.

Pipfile.lock — файл, который включает детерминированные зависимости с указанными точными требованиями для воспроизведения в виртуальной среде. Он содержит точные версии для пакетов и их хэши для более безопасной проверки.

Обратите внимание: вы никогда не должны изменять этот файл вручную. Он предназначен для генерации с pipenv lock.

conda

Итак, как мы рассмотрели ранее:

  • pip это менеджер пакетов для Python;
  • virtualenv является менеджером среды для Python;
  • conda является одновременно менеджером пакетов и среды и не зависит от языка

virtualenv создает изолированные среды только для разработки на Python, а conda может создавать их для любого поддерживаемого ею языка программирования. pip устанавливает только пакеты Python из PyPI.

С помощью conda можно:

  • установить пакеты (написанные на любом языке) из репозиториев, таких как Anaconda Repository и Anaconda Cloud;
  • установить пакеты из PyPI, используя pip в активной среде Conda.

Conda предоставляет управление пакетами, зависимостями и средой для любого языка — Python, R, Ruby, Lua, Scala, Java, JavaScript, C / C ++, FORTRAN и других.

Conda — это система управления пакетами с открытым исходным кодом и система управления средой, работающая в Windows, macOS и Linux. Conda быстро устанавливает, запускает и обновляет пакеты и их зависимости. Conda легко создает, сохраняет, загружает и переключается между средами на вашем локальном компьютере. Он был создан для программ Python, но может упаковывать и распространять программное обеспечение для любого языка.

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

Рекомендуется добавлять канал в список каналов как элемент с самым низким приоритетом. Таким образом вы можете включить «специальные» пакеты, которые не являются частью установленных по умолчанию (каналы ~ Continuum). В результате вы получите все пакеты по умолчанию — без риска перезаписи их по каналу с более низким приоритетом (и тот «специальный», который вам нужен).

Python — стремительно развивающийся язык, который активно набирает популярность во всех сферах разработки, включая WEB, Data Engineering, Data Science, Data Analysis. Python обладает очень лаконичным и интуитивно понятным синтаксисом. Рассмотренные нами инструменты облегчают жизнь как начинающему, так и опытному Python разработчику, независимо от проекта и уровня его сложности. Владея всем этим функционалом, можно удобно устанавливать и настраивать зависимости, а также легко управлять своим Python окружением.

👍НравитсяПонравилось13
В избранноеВ избранном8
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Для роботи з одним проектом вистачить і pip + virtualenv, хоча як кому.

Python обладает очень лаконичным и интуитивно понятным синтаксисом.

Именно так можно описать хренотень, в которой отступы определяют блоки и нет никакой нормальной скобочной альтернативы.

Тут справа звички. Комусь не подобаються зайві фігурні

скобочной альтернативы.

Саме так можна описати хрінь у якій тобі потрібно скролити 300 рядків угору щоб зрозуміти чи це форматер облажався чи справді всю цю лапшу засунули у 4 пари дужок і де немає нормальної альтернативи з відступами.

О так, пехепешники з візаві.нет не дадуть збрехати, там до сих є коди в яких немає взагалі відступів)

Пролистал по диагонали, и потом пошел смотреть на дату статьи, из какого она года.

Статья про dependencies, и ничего про pep-517/518, и pyproject.toml? Не говоря уже о poetry etc?

Чудова стаття, і подано структуровано.
Щодо conda, то ще є conda-build, який будує артефакти для потрібних платформ і які можна встановлювати з локальних файлів. Або ж, можна розміщувати свої «recipe» (yaml інструкції для побудови пакету) в каналі conda-forge або у власному каналі

Подписаться на комментарии