Виртуальные окружения: venv и Poetry

Тема дорожной карты · Python Programming

Виртуальное окружение — это изолированная среда для работы с проектом, которая позволяет избежать конфликтов из-за версий библиотек и обеспечивает стабильность приложения. Оно состоит из собственного python и site-packages, где хранятся все необходимые зависимости. Создание виртуального окружения — это важный шаг для поддержания чистоты и стабильности проекта, особенно при работе в команде или использовании различных версий библиотек.

Минимальный стек для создания виртуального окружения включает команды python -m venv .venv для создания окружения и pip install -r requirements.txt для установки всех необходимых зависимостей. Для фиксации текущего состояния зависимостей используется команда pip freeze, которая создает файл requirements.txt с зафиксированными версиями всех пакетов.

Для более сложных и крупных проектов рекомендуется использовать инструменты, которые не только фиксируют версии зависимостей, но и метаданные, такие как Poetry, uv, pip-tools, и pip-compile. Эти инструменты обеспечивают более надежную и управляемую среду для разработки, позволяя избежать проблем, связанных с нестабильными версиями библиотек.

Имейте в виду, что установка пакетов глобально через pip install в системный Python может привести к конфликтам версий и сложностям при поддержке проекта. Вместо этого всегда используйте виртуальные окружения и не коммитьте папку .venv/ в систему контроля версий, так как она является машинно-зависимой и может вызвать проблемы при деплое на другие машины.

Как это работает

Виртуальные окружения (venv, virtualenv, poetry, uv) изолируют зависимости проекта, позволяя разным проектам использовать разные версии одной и той же библиотеки. Это достигается путем создания отдельной среды для каждого проекта, в которой все зависимости устанавливаются и фиксируются.

Модуль — это файл с расширением .py, а пакет — это директория, содержащая файл __init__.py (или namespace package без него). Команда import ищет модули и пакеты в пути sys.path, который включает директорию скрипта, переменную окружения PYTHONPATH и директорию site-packages.

Файл pyproject.toml (PEP 518/621) описывает систему сборки, метаданные проекта и зависимости. Команда pip install -e . устанавливает локальный пакет в режиме редактирования, что позволяет изменять код пакета и сразу видеть изменения в проекте.

Когда применять

Всегда используйте виртуальные окружения для каждого проекта, чтобы избежать конфликтов версий библиотек и обеспечить стабильность приложения. Для современных проектов рекомендуется использовать pyproject.toml и инструменты, такие как uv или poetry, вместо простого requirements.txt. Lockfile, создаваемый этими инструментами, гарантирует воспроизводимость установки зависимостей.

Разбирайте проект на пакеты, когда кодовая база переваливает за ~3-5 файлов в одной логической области или когда планируется публикация на PyPI. Используйте файл __main__.py, чтобы запускать скрипты через команду python -m mypkg.

Типичные ошибки

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

Еще одна распространенная ошибка — использование режима редактирования pip install -e . вместе с несколькими версиями Python в переменной окружения PATH. Это может привести к неопределенному поведению, так как неясно, какой экземпляр Python будет запущен. Для устранения этой проблемы следует использовать команду which python или проверить переменную sys.executable внутри скрипта.

Коммитирование папки виртуального окружения .venv/ в систему контроля версий также является распространенной ошибкой. Виртуальное окружение является машинно-зависимым и должно быть исключено из системы контроля версий с помощью файла .gitignore.

Связанные понятия

Полезные ресурсы