Инфраструктура для Data-Engineer виртуальные окружения

93aa6708ef8007a768e758ddafc7635c.jpeg

Введение

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

Я подготовил примеры кода, которые помогут нам на практике разобраться с каждым инструментом. Давайте рассмотрим основные подходы к управлению виртуальными окружениями и пакетами в Python.

Зачем нужны виртуальные окружения

Виртуальные окружения позволяют:

  • Изолировать зависимости между проектами. Это особенно полезно, если один проект требует, например, Airflow 1, а другой — Airflow 2.

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

  • Упрощать управление пакетами и их версиями.

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

Python интерпретаторы

Прежде чем погрузиться в виртуальные окружения, важно понимать, с какими версиями Python мы можем работать.

Python постоянно развивается, и новые версии интерпретатора добавляют новые функции, повышают производительность и исправляют ошибки.

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

Их можно установить через ваш пакетный менеджер, к примеру через brew или из исходного кода.

В примерах ниже я буду использовать Python 3.12 (Python 3.12.5)

Также весь код и все файлы по статье вы сможете найти в моём репозитории.

venv

Встроенный модуль Python для создания виртуальных окружений.

Создание окружения

Давайте создадим наше первое виртуальное окружение:

python3.12 -m venv venv

После создания окружения мы его сможем увидеть в нашей директории:

.
├── LICENSE
├── README.md
└── venv

Стоит также отметить, что мы можем создать несколько виртуальных окружений с разными именами:

python3.12 -m venv venv1

Или

python3.12 -m venv venv2

И если снова посмотреть на нашу директорию, то мы сможем увидеть наши окружения:

.
├── LICENSE
├── README.md
├── venv
├── venv1
└── venv2

После создания окружения оно не »активировано» — это означает, что все наши вызовы команды python будут идти от глобального интерпретатора.

Для активации виртуального окружения необходимо выполнить команду:

source venv/bin/activate

Если необходимо, то можно указать другое имя окружения.

К примеру:

source venv1/bin/activate

После этого мы можем запускать наш Python с теми зависимостями, которые есть в нашем окружении.

Для того чтобы проверить, какие пакеты у нас установлены необходимо выполнить команду:

pip list

И мы получим:

Package Version
------- -------
pip     24.2

Добавление пакетов

Все пакеты для установки доступны через PyPi.

Для того чтобы добавить пакет необходимо выполнить команду:

pip install Faker==33.0.0

Важно: если не указать версию пакета, то будет установлена последняя версия. Но вы можете это контролировать.

Теперь мы можем посмотреть, что установлено в нашем виртуальном окружении командой:

pip list

И получим такой список:

Package           Version
----------------- -----------
Faker             33.0.0
pip               24.3.1
python-dateutil   2.9.0.post0
six               1.16.0
typing_extensions 4.12.2

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

Также вы часто можете увидеть на проектах такой файл: requirements.txt. В нём часто указываются те зависимости, которые необходимы для проекта.

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

pip install -r requirements.txt

Изменение версии пакета

Помимо установки нужной версии пакета мы можем также изменить её во время жизни проекта. Это бывает необходимо, если есть конфликт пакетов или нужны новые методы пакета.

Для того, чтобы изменить текущую версию Faker мы можем выполнить команду:

pip install Faker==32.0.0

И в логе мы сможем увидеть, что у нас удалилась прошлая версия и установилась новая:

Collecting Faker==32.0.0
  Downloading Faker-32.0.0-py3-none-any.whl.metadata (15 kB)
Requirement already satisfied: python-dateutil>=2.4 in ./venv/lib/python3.12/site-packages (from Faker==32.0.0) (2.9.0.post0)
Requirement already satisfied: typing-extensions in ./venv/lib/python3.12/site-packages (from Faker==32.0.0) (4.12.2)
Requirement already satisfied: six>=1.5 in ./venv/lib/python3.12/site-packages (from python-dateutil>=2.4->Faker==32.0.0) (1.16.0)
Downloading Faker-32.0.0-py3-none-any.whl (1.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 3.3 MB/s eta 0:00:00
Installing collected packages: Faker
  Attempting uninstall: Faker
    Found existing installation: Faker 33.0.0
    Uninstalling Faker-33.0.0:
      Successfully uninstalled Faker-33.0.0
Successfully installed Faker-32.0.0

Удаление пакетов

Также мы можем удалять проект из своего окружения. Для этого необходимо выполнить команду:

pip uninstall Faker

Poetry

Poetry является популярным инструментом для работы с пакетами и зависимостями. Я ниже рассмотрю только основные моменты, а все подробности вы сможете узнать из документации, которая хорошо описана и оформлена.

Создание окружения

Есть несколько видов создания окружений, они подробно описаны в документации. Но мне привычнее создавать через venv с вызовом нужной версии Python.

Пример:

python3.12 -m venv venv

Или:

python3.11 -m venv venv

И так далее.

Но вы можете установить и инициализировать poetry удобным вам способом.

Давайте теперь создадим окружение с которым мы будем работать:

python3.12 -m venv poetry_venv

Теперь необходимо установить сам Poetry:

pip install poetry==1.8.4

После этого мы должны в нашем проекте создать pyproject.toml:

# Assume Python 3.12.
target-version = "py312"

[tool.poetry]
name = "infrastructure_for_data_engineer_virtual_environments"
version = "0.0.1"
description = ""
authors = ["Ivan Korsakov "]
license = "MIT"
readme = "README.md"
package-mode = false

[tool.poetry.urls]
"Homepage" = ""
"Bug Tracker" = ""
"PyPi" = ""

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.poetry.dependencies]
python = "^3.12.1"
Faker = "^33.0.0"

[tool.poetry.group.dev.dependencies]
python = "^3.12.1"
Faker = "^33.0.0"

И если сейчас запустить команду:

poetry lock && \
poetry install

То у нас соберётся виртуальное окружение с необходимыми зависимостями

Добавление пакетов

Чтобы добавить пакет необходимо выполнить команду:

poetry add pendulum==3.0.0

И данный пакет добавится в наше виртуальное окружение и также добавится в pyproject.toml.

Изменение версии пакета

Изменение версии работает по такой же логике как и добавление:

poetry add pendulum==2.0.0

Удаление пакета

Для удаления пакета необходимо воспользоваться командой:

poetry remove pendulum

Заключение

В этой статье мы рассмотрели основные инструменты для работы с виртуальными окружениями в Python. Каждый инструмент имеет свои сильные и слабые стороны:

  • venv отлично подходит для простых проектов и обучения.

  • poetry незаменим в сложных проектах с множеством зависимостей. Также на рынке пакетных менеджеров существуют аналоги:

  • uv — это новый пакетный менеджер, написан создателями популярного сейчас линтера Ruff. Набирает популярность за счёт своей скорости и »свежего» подхода для работы с зависимостями.

  • Conda — пакетный менеджер для работы на разных операционных системах

  • etc При выборе инструмента стоит учитывать:

  • Размер и сложность проекта

  • Требования к управлению зависимостями

  • Опыт команды

  • Производительность

  • Интеграцию с другими инструментами

В реальных проектах часто используется комбинация инструментов — например, poetry для управления зависимостями в основном проекте и venv для быстрых экспериментов. Главное — выбирать инструмент исходя из конкретных требований задачи.

Также если вам необходима консультация/менторство/мок-собеседование и другие вопросы по дата-инженерии, то вы можете обращаться ко мне. Все контакты указаны по ссылке.

© Habrahabr.ru