Виртуальные окружения Python: как создать изолированную среду
Для кого эта статья:
- Начинающие Python-разработчики
- Разработчики, желающие улучшить свои навыки управления зависимостями
Профессионалы в области разработки, ищущие рекомендации по использованию виртуальных окружений
Управление Python-окружениями — навык, отделяющий новичков от профессионалов. Многие начинающие разработчики сталкиваются с "это работает на моей машине" синдромом, когда их код отказывается запускаться на других системах. Виртуальные окружения решают эту проблему, изолируя зависимости проекта от системного Python. В этой пошаговой инструкции я расскажу, как настроить и эффективно использовать виртуальные среды, чтобы ваши проекты работали везде одинаково 🚀. Мы рассмотрим три основных инструмента: встроенный venv, классический virtualenv и мощный conda.
Хотите понимать Python на профессиональном уровне? Курс Обучение Python-разработке от Skypro включает углубленное изучение виртуальных окружений и системы управления зависимостями. Вы не просто научитесь создавать простейшие скрипты, а освоите промышленную разработку с лучшими практиками, включая работу с Docker, CI/CD и автоматизированное тестирование. Наши выпускники получают 2-3 оффера уже к концу обучения!
Что такое виртуальное окружение Python и зачем оно нужно
Виртуальное окружение в Python — это изолированная среда, содержащая собственную копию интерпретатора и библиотек. Представьте его как отдельную песочницу для каждого вашего проекта, где вы можете устанавливать любые версии пакетов, не влияя на другие проекты или системные настройки.
Михаил Демидов, Lead Python-разработчик В 2019 году я вел два проекта одновременно: один требовал Django 1.11 с Python 3.6, другой — Django 3.0 с Python 3.8. Без виртуальных окружений мне пришлось бы постоянно переустанавливать библиотеки при переключении между проектами. Однажды из-за спешки я забыл переключиться и потратил 4 часа на отладку непонятных ошибок. После этого виртуальные окружения стали моим обязательным инструментом. Создание отдельной среды для каждого проекта теперь первый шаг при работе с любым кодом — даже простейшим скриптом.
Основные преимущества виртуальных окружений:
- Изоляция зависимостей — каждый проект может использовать собственные версии библиотек
- Воспроизводимость — легко передать проект коллегам или запустить на сервере с теми же зависимостями
- Чистота системы — ваша основная система Python остается неизменной
- Тестирование совместимости — возможность проверить код на разных версиях Python и библиотек
- Упрощенное развертывание — точно знаете, какие пакеты необходимы для работы
Существует несколько инструментов для создания виртуальных окружений. Выбор зависит от ваших конкретных потребностей:
| Инструмент | Встроен в Python | Совместимость | Преимущества | Недостатки |
|---|---|---|---|---|
| venv | Да (с Python 3.3+) | Python 3.x | Простота, часть стандартной библиотеки | Нет поддержки Python 2.x |
| virtualenv | Нет | Python 2.x и 3.x | Универсальность, дополнительные функции | Требует отдельной установки |
| conda | Нет | Мультиязычный | Управление не только Python-пакетами | Больший размер, сложнее в освоении |
Теперь рассмотрим подробнее каждый из этих инструментов. 🛠️

Создание виртуального окружения с помощью venv
Модуль venv встроен в Python 3.3 и выше, поэтому дополнительная установка не требуется. Это рекомендуемый способ создания виртуальных окружений для большинства пользователей Python 3.
Процесс создания виртуального окружения с venv выглядит так:
- Откройте терминал (командную строку)
- Перейдите в директорию вашего проекта
- Выполните команду для создания окружения
- Активируйте окружение
- Устанавливайте нужные пакеты
Давайте рассмотрим это на практике. Для создания окружения выполните:
python -m venv myenv
Здесь myenv — название вашего окружения. Традиционно используют venv, env, .venv или название проекта с суффиксом -env.
После создания необходимо активировать окружение. Команды различаются для разных операционных систем:
| Операционная система | Команда активации | Команда деактивации |
|---|---|---|
| Windows (cmd) | myenv\Scripts\activate.bat | deactivate |
| Windows (PowerShell) | .\myenv\Scripts\Activate.ps1 | deactivate |
| Linux/macOS (bash/zsh) | source myenv/bin/activate | deactivate |
| Linux/macOS (fish) | source myenv/bin/activate.fish | deactivate |
После активации вы увидите имя окружения в начале строки терминала, например: (myenv) C:\Users\username>. Теперь любые пакеты Python, которые вы установите, будут помещены в это виртуальное окружение, а не в глобальную установку Python.
Для установки пакетов используйте pip как обычно:
pip install pandas numpy matplotlib
Для деактивации виртуального окружения просто введите:
deactivate
Важные флаги при создании окружения с venv:
--system-site-packages— включает доступ к системным пакетам из виртуального окружения--symlinks— использует символические ссылки вместо копирования файлов (экономит место)--clear— очищает директорию, если она уже существует--upgrade— обновляет окружение с новыми версиями базовых пакетов
Пример использования с флагами:
python -m venv --system-site-packages --clear myenv
При работе с venv помните: виртуальное окружение создаётся на основе той версии Python, которой была вызвана команда. Для использования другой версии Python нужно явно указать путь к нужному интерпретатору. 🐍
Работа с virtualenv: установка и основные команды
Virtualenv — это более гибкий инструмент, предшествовавший venv. Он до сих пор популярен благодаря дополнительным возможностям и совместимости с Python 2.x. Если вы работаете с устаревшими проектами или вам нужны расширенные функции, virtualenv — отличный выбор.
Анна Сергеева, DevOps-инженер Мы поддерживали проект с кодовой базой 2012 года, использующей Python 2.7. Новые разработчики команды постоянно сталкивались с проблемами настройки окружения. Я создала автоматизированный скрипт с virtualenv, который корректно настраивал все зависимости одной командой. Это сократило время адаптации новых сотрудников с нескольких дней до 15 минут. Дополнительно мы использовали virtualenvwrapper для удобного переключения между разными проектами. Когда нам наконец удалось мигрировать на Python 3, мы смогли запускать тесты в обоих окружениях параллельно, что значительно упростило миграцию.
Для начала работы с virtualenv его нужно установить:
pip install virtualenv
Создание виртуального окружения с virtualenv:
virtualenv myproject_env
По умолчанию virtualenv использует системную версию Python. Чтобы указать конкретную версию, используйте параметр --python:
virtualenv --python=/usr/bin/python3.8 myproject_env
virtualenv --python=python3.9 myproject_env
Активация и деактивация окружения выполняется теми же командами, что и с venv:
- Windows:
myproject_env\Scripts\activate - Linux/macOS:
source myproject_env/bin/activate - Деактивация:
deactivate
Ключевые опции virtualenv:
--no-site-packages— изолирует окружение от системных пакетов (поведение по умолчанию)--system-site-packages— включает доступ к системным пакетам--always-copy— всегда копирует файлы вместо использования символических ссылок--relocatable— делает окружение перемещаемым--no-download— не загружает последние версии pip/setuptools
Дополнительный удобный инструмент — virtualenvwrapper, который упрощает управление несколькими виртуальными окружениями:
pip install virtualenvwrapper
Для Windows используйте:
pip install virtualenvwrapper-win
Преимущества virtualenvwrapper:
- Организует все окружения в одном месте
- Предоставляет удобные команды для создания и удаления окружений
- Упрощает переключение между окружениями
Основные команды virtualenvwrapper:
mkvirtualenv project1— создать новое окружениеworkon project1— переключиться на окружениеdeactivate— выйти из текущего окруженияrmvirtualenv project1— удалить окружениеlsvirtualenv— показать список всех окружений
Virtualenv по-прежнему остается мощным инструментом, особенно при работе с проектами, требующими совместимости с Python 2.x или при необходимости более тонкой настройки окружений. 🔧
Установка и управление зависимостями в виртуальной среде
Управление зависимостями — один из ключевых аспектов работы с виртуальными окружениями. Правильная организация этого процесса обеспечивает воспроизводимость и переносимость ваших проектов.
Основной инструмент для управления пакетами в Python — pip. Вот основные команды для работы с зависимостями:
pip install package_name— установка пакетаpip install package_name==1.2.3— установка конкретной версииpip uninstall package_name— удаление пакетаpip list— просмотр установленных пакетовpip freeze— вывод списка пакетов в формате requirements.txt
Для фиксации зависимостей проекта используйте:
pip freeze > requirements.txt
А для установки всех зависимостей из файла:
pip install -r requirements.txt
Рассмотрим более продвинутые способы управления зависимостями:
| Инструмент | Назначение | Преимущества | Команды установки |
|---|---|---|---|
| Pipenv | Комбинирует pip и virtualenv | Автоматически создает/управляет окружением, фиксирует точные версии зависимостей | pip install pipenv |
| Poetry | Управление зависимостями и сборка пакетов | Разрешение зависимостей, удобная сборка пакетов | pip install poetry |
| pip-tools | Точное фиксирование зависимостей | Создает воспроизводимые сборки, разделение прямых и транзитивных зависимостей | pip install pip-tools |
| pyenv | Управление версиями Python | Простое переключение между версиями Python | Зависит от ОС (см. документацию) |
Для продвинутого управления зависимостями с Pipenv используйте:
pipenv install requests numpy pandas
Это автоматически создаст виртуальное окружение и установит указанные пакеты. Pipenv использует два файла:
Pipfile— список зависимостей с гибкими ограничениями версийPipfile.lock— точные версии всех пакетов и их хеши для воспроизводимых сборок
Для Poetry процесс выглядит так:
poetry new my-project
cd my-project
poetry add requests pandas
Poetry использует pyproject.toml для управления зависимостями и предлагает более комплексный подход к разработке Python-пакетов.
Советы по управлению зависимостями:
- Всегда фиксируйте версии зависимостей для продакшн-проектов
- Разделяйте основные и dev-зависимости (для тестирования, линтинга и т.д.)
- Регулярно обновляйте зависимости, особенно при наличии уязвимостей
- Используйте
pip install --upgrade-strategy=only-if-neededдля минимальных обновлений - Автоматизируйте проверку уязвимостей в зависимостях с помощью инструментов вроде Safety или Snyk
Пример структуры с разделением зависимостей:
pip freeze > requirements.txt # Все зависимости
pip install pytest pytest-cov black flake8 # Инструменты разработки
pip freeze | grep -E 'pytest|black|flake8' > requirements-dev.txt # Только dev-зависимости
Правильное управление зависимостями позволяет избежать ситуации "у меня работает" и обеспечивает согласованность между средами разработки, тестирования и продакшена. 📦
Conda для создания и управления Python-окружениями
Conda — это мощная система управления пакетами и окружениями, которая выходит за рамки Python. Она особенно полезна для проектов с научными вычислениями и анализом данных, где могут потребоваться не только Python-библиотеки, но и внешние зависимости, написанные на C, C++ или Fortran.
Существует несколько дистрибутивов Conda:
- Anaconda — полный дистрибутив с более чем 1500 пакетами для научных вычислений
- Miniconda — минимальный установщик, включающий только Conda и Python
- Miniforge/Mambaforge — альтернативные дистрибутивы, использующие conda-forge в качестве канала по умолчанию
Для большинства пользователей я рекомендую Miniconda как оптимальный выбор, так как он не занимает много места и позволяет устанавливать только нужные пакеты.
После установки Conda вы можете создать новое окружение командой:
conda create --name myenv python=3.9
Здесь myenv — название окружения, а python=3.9 указывает версию Python. Активация окружения:
- Windows:
conda activate myenv - Linux/macOS:
conda activate myenv(в новых версиях) илиsource activate myenv(в старых)
Деактивация выполняется командой:
conda deactivate
Основные команды управления окружениями в Conda:
conda env list— показать все окруженияconda create --name myenv python=3.8— создать окружениеconda remove --name myenv --all— удалить окружениеconda env export > environment.yml— экспортировать окружениеconda env create -f environment.yml— создать окружение из файла
Установка пакетов с Conda:
conda install numpy pandas scikit-learn
Conda имеет несколько каналов (источников пакетов), основные из которых:
defaults— официальные пакеты Anacondaconda-forge— сообщество-управляемый канал с более свежими версиямиbioconda— биоинформатические пакеты
Для установки из определенного канала используйте:
conda install -c conda-forge tensorflow
Мощная особенность Conda — возможность управлять не только Python-пакетами:
conda install -c conda-forge opencv cudatoolkit
Для более быстрой работы с пакетами можно использовать mamba — реализацию conda на C++:
conda install -c conda-forge mamba
mamba install numpy pandas
Часто задаваемые вопросы о Conda:
- В чем отличие от pip/venv? Conda управляет не только Python-пакетами, но и бинарными зависимостями, лучше разрешает конфликты версий.
- Можно ли использовать pip в Conda-окружении? Да, но лучше сначала установить все возможные пакеты через conda.
- Нужно ли использовать Conda для всех проектов? Нет, для простых Python-проектов достаточно venv/virtualenv.
- Можно ли перенести Conda-окружение на другой компьютер? Да, через environment.yml файл.
Пример файла environment.yml:
name: myenv
channels:
- conda-forge
- defaults
dependencies:
- python=3.9
- numpy=1.21
- pandas
- matplotlib
- pip
- pip:
- tensorflow
- keras
Conda — идеальный выбор для научных, инженерных проектов и работы с машинным обучением, где требуется управление сложными зависимостями вне экосистемы Python. 🔬
Виртуальные окружения Python — незаменимый инструмент каждого профессионального разработчика. Они превращают хаос зависимостей в управляемую, воспроизводимую среду для ваших проектов. Независимо от выбранного инструмента (venv, virtualenv или conda), важно сделать создание изолированного окружения своей привычкой с самого начала работы над проектом. Это сэкономит вам часы отладки, упростит совместную работу и подготовит к промышленной разработке. Не существует единственного "правильного" инструмента — выбирайте тот, который лучше соответствует вашим конкретным задачам, но всегда используйте виртуальные окружения.