Представьте, что вы работаете над двумя разными проектами на Python. Для первого проекта вам нужна библиотека requests версии 2.28.0, а для второго — версия 2.31.0. Если установить эти библиотеки глобально, они будут конфликтовать: установка новой версии удалит старую, и первый проект перестанет работать. Или представьте, что вы обновили библиотеку в одном проекте, и внезапно перестал работать другой проект, который зависел от старой версии. Или ситуация: вы разрабатываете проект на Python 3.11, а на сервере стоит Python 3.9. Как быть? Именно для решения всех этих проблем в Python существуют виртуальные окружения.
Виртуальное окружение — это изолированная среда со своим интерпретатором Python и своим набором библиотек. Каждый проект получает своё собственное «личное пространство», где можно устанавливать любые версии библиотек, не боясь повлиять на другие проекты. Виртуальные окружения также позволяют использовать разные версии Python для разных проектов и гарантируют воспроизводимость: вы можете создать файл со списком всех зависимостей и их версий, и любой другой разработчик (или сервер) сможет воссоздать точно такое же окружение одной командой.
В этом уроке мы подробно изучим виртуальные окружения — инструмент, который является стандартом де-факто в современной Python-разработке. Вы узнаете, зачем нужны виртуальные окружения, чем они отличаются от глобальной установки пакетов, и как они помогают избегать конфликтов зависимостей. Это особенно важно при разработке нескольких проектов одновременно, при работе в команде (чтобы у всех были одинаковые версии библиотек), и при развертывании проектов на сервере (чтобы окружение на сервере совпадало с окружением разработчика).
Мы научимся создавать виртуальные окружения с помощью встроенного модуля venv (появился в Python 3.3, до этого использовался сторонний virtualenv). Вы узнаете, как создать окружение командой python -m venv myenv, как активировать его на разных операционных системах (Windows: myenv\Scripts\activate, macOS/Linux: source myenv/bin/activate), и как деактивировать (deactivate). Разберем структуру виртуального окружения: отдельная папка с интерпретатором Python (копия или симлинк на глобальный), папка Lib/site-packages для установленных библиотек, и скрипты активации для разных оболочек (cmd, PowerShell, bash, zsh). Поймем, почему виртуальное окружение не нужно добавлять в Git (добавляем в .gitignore), но нужно обязательно документировать зависимости, чтобы другой разработчик мог воссоздать окружение.
Изучим управление зависимостями с помощью pip (Pip Installs Packages) — стандартного менеджера пакетов Python. После активации виртуального окружения pip install устанавливает пакеты именно в это окружение, а не глобально. Мы научимся создавать requirements.txt с помощью pip freeze > requirements.txt — эта команда сохраняет список всех установленных пакетов с их точными версиями. Затем pip install -r requirements.txt устанавливает все зависимости из этого файла одной командой. Вы узнаете о лучших практиках управления зависимостями: разделение на requirements.txt (основные зависимости для запуска приложения) и requirements-dev.txt (зависимости для разработки), указание диапазонов версий, заморозка точных версий для воспроизводимости.
Познакомимся с современным альтернативным инструментом uv — быстрой заменой pip, написанной на Rust (тем же языком, что и инструменты для JavaScript — npm, yarn, bun). uv работает значительно быстрее (в 10-100 раз, особенно при установке пакетов с большим количеством зависимостей), умеет управлять версиями Python (устанавливает нужную версию автоматически, если её нет на системе), поддерживает современный стандарт pyproject.toml (единый файл конфигурации для всех инструментов Python), и имеет удобный интерфейс, совместимый с pip и pip-tools. Вы научитесь устанавливать uv (через pip install uv или официальный скрипт), создавать виртуальное окружение командой uv venv, добавлять зависимости с автоматическим сохранением в pyproject.toml (uv add requests), синхронизировать окружение с файлом зависимостей (uv sync), и управлять версиями Python (uv python install 3.11).