venv
Баннер мобильный (3) Пройти тест

Виртуальные окружения в Python: зачем они нужны и как работает venv

Разбираемся на практике

Инструкция

17 апреля 2025

Поделиться

Скопировано
Виртуальные окружения в Python: зачем они нужны и как работает venv

Содержание

    Один проект требует Django 4.2, другой — Flask и пару экспериментальных библиотек. Как не запутаться в зависимостях и сохранить порядок в системе? Ответ — виртуальное окружение. В этой статье разберемся, как с помощью venv создать изолированную среду и запустить в ней простое Python-приложение.

    Что такое виртуальное окружение и зачем оно нужно

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

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

    Python venv — один из самых популярных инструментов для этой задачи. Он входит в стандартную библиотеку Python и служит универсальным способом защиты от несовместимости установленных пакетов.

    Прежде чем начать использовать виртуальную среду, её нужно создать и активировать. Далее разберёмся, как это сделать.

    Создание, активация и деактивация venv

    Чтобы создать виртуальное окружение с помощью venv, откройте командную строку и выполните следующую команду:

    python3 -m venv env

    В этой команде флаг -m указывает, что venv запускается как исполняемый модуль. Последняя часть команды (env) — это имя создаваемого виртуального окружения. В результате выполнения появится папка env (обычно в текущем каталоге), содержащая все необходимые файлы среды.

    Внутри папки env находятся четыре основные директории — bin, include, lib, lib64 — и конфигурационный файл pyvenv.cfg.

    • В папке bin размещаются исполняемые файлы и сценарии (в Windows вместо неё используется папка Scripts).
    • Папка include содержит файлы, необходимые для компиляции некоторых пакетов.
    • В каталогах lib и lib64 располагаются установленные библиотеки.
    • Файл pyvenv.cfg хранит настройки, используемые при активации среды.

    Чтобы начать работу в виртуальной среде, её нужно активировать. В Linux и macOS используется команда:

    source env/bin/activate

    В Windows — так:

    env\Scripts\activate.bat

    После успешной активации в командной строке появится приглашение вида:

    (env) alex@alex-pc:~$

    Теперь можно устанавливать пакеты, запускать скрипты и работать в изолированной среде. Когда работа завершена, окружение деактивируется простой командой:

    deactivate

    Если вы больше не планируете использовать среду, достаточно просто удалить папку env. Для получения справки по доступным аргументам и флагам используйте:

    python3 -m venv -h

    Вывод будет примерно таким:

    Установка venv

    Например:

    • флаг —upgrade используется для обновления существующей среды;
    • флаг —upgrade-deps — для обновления зависимостей до последних версий из PyPI;
    • флаг -h (или —help) выводит справку, как показано выше.

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

    Запуск простой программы в venv

    Итак, виртуальное окружение создано и активировано. Теперь попробуем запустить в нём простую программу. Сначала напишем следующий скрипт:

    import datetime
    import pytz
    
    city_name = 'Иркутск'
    time_zone = pytz.timezone('Asia/Irkutsk')
    current_time = datetime.datetime.now(time_zone)
    
    print(f"Текущее время в городе {city_name}: {current_time.strftime('%H:%M')}")

    Эта программа выводит в консоль текущее время в городе Иркутск. Для этого используются модули datetime и pytz, которые импортируются в начале. Затем создаётся переменная city_name с названием города. Далее определяется временная зона (time_zone) и передаётся в метод now() модуля datetime. Это позволяет получить объект current_time с актуальным временем для указанного города. Результат выводится на экран с помощью форматированной строки.

    Сохраним файл под именем current-time.py рядом с директорией виртуального окружения. Чтобы запустить программу, в активированной среде выполните команду:

    python3 current-time.py

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

    ./env/bin/python current-time.py

    После запуска может появиться сообщение об ошибке: модуль pytz не найден. Установим его командой:

    pip install pytz

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

    (env) alex@alex-pc:~$ python3 current-time.py
    Текущее время в городе Иркутск: 12:04

    Это значит, что всё работает как нужно.

    Рекомендуется для каждого проекта создавать отдельную директорию, а в ней — своё виртуальное окружение. Например, можно хранить проекты в папке Projects, а для этого случая создать подпапку current-time, где будет находиться файл current-time.py. В командной строке нужно перейти в эту папку и далее действовать, как описано во втором разделе этой статьи.

    Работать с виртуальными средами особенно удобно в IDE PyCharm и редакторе Visual Studio Code с установленными расширениями для Python. В PyCharm при создании нового проекта сразу предлагается создать виртуальное окружение или указать путь к уже существующему.

    Шаг 1
    Источник: автор статьи

    Если вы открываете существующую папку проекта, в которой ещё нет окружения, PyCharm или Visual Studio Code позволят легко создать его вручную. В Visual Studio Code нужно открыть командную палитру через меню «Вид». 

    Шаг 2
    Источник: автор статьи

    Потом в открывшемся окне выбрать пункт «Python: Выбор интерпретатора» и в следующем окне можно создать новую виртуальную среду или выбрать уже существующую:

    Шаг 3
    Источник: автор статьи

    Далее кратко рассмотрим альтернативные инструменты для управления виртуальными окружениями.

    Альтернативные виртуальные окружения

    Но, как говорится, на одном Python venv свет клином не сошелся.Существуют и другие инструменты для управления виртуальными средами.

    • Virtualenv — во многом схож с venv, но обладает более широкими возможностями и поддерживает более старые версии Python.
    • Poetry — управляет не только зависимостями и виртуальными окружениями, но и сборкой пакетов, публикацией проектов и всей их структурой.
    • Conda — полноценный менеджер окружений и целая экосистема. Обладает собственным репозиторием пакетов и подходит не только для Python, но и для других языков.
    • Pipenv — объединяет менеджер пакетов и менеджер виртуальных сред. Делает акцент на удобстве работы с зависимостями и автоматическом создании окружений.
    • PyFlow — инструмент для управления пакетами, зависимостями и виртуальными средами. Подходит для упрощения процессов установки и настройки.
    • Hatch — современный, расширяемый менеджер проектов. Надёжно управляет виртуальными средами и поддерживает создание пользовательских сценариев.

    Полезные ссылки

    Ниже — несколько ресурсов, которые будут особенно полезны начинающим Python-разработчикам:

    Инструкция

    Поделиться

    Скопировано
    0 комментариев
    Комментарии