Один проект требует 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
Вывод будет примерно таким:

Например:
- флаг —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 при создании нового проекта сразу предлагается создать виртуальное окружение или указать путь к уже существующему.

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

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

Далее кратко рассмотрим альтернативные инструменты для управления виртуальными окружениями.
Альтернативные виртуальные окружения
Но, как говорится, на одном Python venv свет клином не сошелся.Существуют и другие инструменты для управления виртуальными средами.
- Virtualenv — во многом схож с venv, но обладает более широкими возможностями и поддерживает более старые версии Python.
- Poetry — управляет не только зависимостями и виртуальными окружениями, но и сборкой пакетов, публикацией проектов и всей их структурой.
- Conda — полноценный менеджер окружений и целая экосистема. Обладает собственным репозиторием пакетов и подходит не только для Python, но и для других языков.
- Pipenv — объединяет менеджер пакетов и менеджер виртуальных сред. Делает акцент на удобстве работы с зависимостями и автоматическом создании окружений.
- PyFlow — инструмент для управления пакетами, зависимостями и виртуальными средами. Подходит для упрощения процессов установки и настройки.
- Hatch — современный, расширяемый менеджер проектов. Надёжно управляет виртуальными средами и поддерживает создание пользовательских сценариев.
Полезные ссылки
Ниже — несколько ресурсов, которые будут особенно полезны начинающим Python-разработчикам:
- Создание виртуальных окружений — официальная документация по модулю venv.
- Виртуальные среды и пакеты — руководство по работе с пакетами внутри виртуальных окружений.
- Python-окружения в VS Code — инструкция по созданию и управлению Python-окружениями (в том числе виртуальными) в Visual Studio Code.
- Виртуальные окружения в Python —обзор виртуальных сред и инструментов для работы с ними на русском языке.