Что это такое
Виртуальное окружение — это изолированное окружение среды (в нашем случае это окружение Python), которое позволяет нам использовать определенные версии приложений.
Зачем оно мне?
Предположим, сейчас ты работаешь над несколькими проектами одновременно, и для каждого из них по тем или иным причинам есть свои определенные особенгсти версий пакетов. Например, на одном проекте у тебя Джанга 1.10, на втором — 1.8 , а на третьем — 1.5, да и в придачу Питон 2-й версии. При этом версии приложений менять ну никак нельзя — придется много чего переделывать да и вообще. Вот для таких ситуаций нам как раз и пригодитя виртуальное окружение, позволяющее использовать разные версии приложений.
Что использовать
Все пакеты, работающие с виртуальным окружением решают одну проблему — они позволяют проектам, которые имеют различные (и часто конфликтующие) зависимости, сосуществовать на одной системе.
Virtualenv
virtualenv — стандартный пакет для работы с виртуальным окружением. Используется вместе с virtualenvwrapper для более удобной работы. Установить и ознакомиться подробнее можно в энциклопедии Девмана
Аналоги
Хоть venv и является самым популярным выбором, существуют другие не менее интересные варианты.
Pyenv
Инструмент, позволяющий изолированно использовать различные версии Python. Например, если тебе нужно запустить твой код на разных версиях Питона (2.6, 2.7, 3.3…), то это то, что тебе нужно. Для создания полноценного изолированного окружения следует использовать пакет pyenv-virualenv, позволющий пользоваться pyenv и virtualenv одновременно. Список команд с их описанием здесь(на английском).
Установка
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
Устанавливаем переменные окружения (если у вас Linux, /.bash_profile меняем на «`/.bashrc )
echo 'export PYENV_ROOT token command">$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH token variable">$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
Инициализируем загрузку pyenv в терминале
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
Команды
pyenv install 2.7.9 pyenv install 3.4.3
Делаем rehash после установки
pyenv rehash
Задаем версию Питона для определенной директории. Версия хранится в файле .python-version
pyenv local 2.7.6
Задаем версию глобально. Будет заменена в случае, если задан файл .python-version
pyenv global 3.3.2
Conda
Conda — пакетный менеджер, который также позволяет нам создавать виртуальные окружения.
Установка
Установим пакет Miniconda — это всего лишь conda и ее зависимости. Скачиваем файл по ссылке. Запускаем файл в терминале
bash Miniconda3-latest-Linux-x86_64.sh
, ждем завершения установки, перезапускаем терминал. ЧТобы убедиться в том, что установка произошла успешно, выполни conda list . Если все хорошо, ты увидишь пакеты, которые были установлены.
Работа с виртуальным окружением
Создаем виртуальное окружение
conda create -n yourenvname python=x.x
source activate yourenvname
source deactivate
conda remove -n yourenvname -all
Установку пакетов можно произвоздить как с помощью conda, так и pip. Pip устанавливается вместе с зависимостями.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Python (Русский)/Virtual environment (Русский)
Состояние перевода: На этой странице представлен перевод статьи Python/Virtual environment. Дата последней синхронизации: 28 мая 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
virtualenv — это инструмент, используемый для создания изолированного рабочего пространства для приложения Python. Он даёт некоторые преимущества: например, возможность локальной установки модулей, экспорта рабочей среды и выполнения программы Python внутри этого окружения.
Обзор
Виртуальное окружение (virtual environment) — это каталог, в который устанавливаются некоторые исполняемые файлы и скрипты. Среди файлов есть python для выполнения скриптов и pip для установки других модулей в окружении. Также есть скрипты для активации окружения в различных командных оболочках (для bash, csh и fish). По сути, виртуальное окружение имитирует полную системную установку Python и всех необходимых модулей, не вмешиваясь в работу системы, на которой будет запускаться приложение.
В 2017 году был опубликован Pipenv, который управляет всеми вышеперечисленными инструментами: виртуальными окружениями интерпретаторов python, зависимостями пакетов, их активацией и блокировкой версий в Pipfile.
Установка
Python 3.3+ поставляется с модулем venv. Для более старых версий Python можно использовать сторонний инструмент virtualenv.
Пакеты
Установите один из следующих пакетов:
- Python 3.3+: python
- Python 3: python-virtualenv
- Python 3: python-pipenv
Использование
Все три инструмента похожи.
Создание
Используйте venv или virtualenv для создания виртуального окружения в каталоге вашего проекта. Не забудьте исключить каталог venv из вашей системы контроля версий — для его восстановления достаточно копии pip freeze .
venv
Он входит в состав python (3.3+):
$ python -m venv envname
virtualenv
$ virtualenv envname
Активация
Для активации виртуального окружения используйте один из имеющихся скриптов для вашей командной оболочки. Пример для bash:
$ source envname/bin/activate (envname) $
Теперь команды python и pip будут запускаться и управлять пакетами только внутри виртуального окружения, не затрагивая систему.
Для выхода из виртуального окружения выполните функцию, которую создал скрипт активации:
(envname) $ deactivate
Версии Python
По умолчанию виртуальные окружения создаются с использованием стандартного системного Python. Файл bin/python — это просто символическая ссылка на системный python:
$ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 15 янв 29 18:48 envname/bin/python -> /usr/bin/python
Если вы хотите использовать другую версию Python внутри виртуального окружения, можно использовать опцию -p / —python у virtualenv:
$ virtualenv -p 3.8 envname $ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 18 янв 29 18:48 envname/bin/python -> /usr/bin/python3.8
Также можно использовать pypy3 :
$ virtualenv -p pypy3 envname
virtualenvwrapper
virtualenvwrapper позволяет более удобно управлять виртуальными окружениями через командную строку, предоставляя несколько полезных команд для создания, активации и удаления виртуальных окружений. Этот пакет является обёрткой для python-virtualenv .
Установка
export WORKON_HOME=~/.virtualenvs source /usr/bin/virtualenvwrapper.sh
Строка source /usr/bin/virtualenvwrapper.sh может несколько замедлить запуск новой командной оболочки. Для решения проблемы можно использовать source /usr/bin/virtualenvwrapper_lazy.sh , который загрузит virtualenvwrapper только при первом обращении к нему.
Перезапустите консоль для применения изменений. Каталог WORKON_HOME будет создан автоматически.
Использование
Подробности можно почитать в официальной документации.
Создание виртуального окружения (все опции командной строки, кроме -a , -i , -r и -h , передаются в virtualenv, так что можно использовать опцию -p для выбора нужной версии Python):
$ mkvirtualenv envname
Активация виртуального окружения:
$ workon envname
Установка пакета внутри виртуального окружения (скажем, Django):
(envname) $ pip install django
Выход из виртуального окружения:
(envname) $ deactivate
Pipenv
pipenv упрощает управление через командную строку, предоставляя одну программу, которая выполняет все функции вышеперечисленных инструментов.
Установка
Использование
Все команды можно выполнять в папке проекта, и pipenv распознает текущую ситуацию — найдёт виртуальное окружение в текущем каталоге и будет использовать его.
Подробности в документации: [1], [2], [3].
Смотрите также
- Python venv
- Пакет virtualenv на PyPI
- Документация virtualenvwrapper
Для чего нужно виртуальное окружение в Python?
Обычно вы изменяете свое окружение Python внутри оболочки. Очень часто это бывает bash оболочка, но это может и командная строка windows.
Несколько слов о том, для чего используется виртуальное окружение.
Виртуальное окружение полностью устанавливает свою собственную среду Python. Она отделена от системной среды Python, что означает, что вы можете экспериментировать с различными пакетами Python, не переустанавливая системный Python.
Кроме того, пакет Python может быть связан с пакетами, которые сами по себе должны иметь конкретную версию. В основном это происходит потому, что программное обеспечение развивается, и иногда необходимо сосредоточиться на определенной версии. Например, библиотека Django, разработчики которой отказались от поддержки PostgreSQL 9.1, и поддерживает версии начиная с PostgreSQL 9.2. Подробно об этом можно прочитать здесь. При этом может случиться так, что для других проектов Вам нужна именно версия 9.1.
Некоторые программисты используют определенные версии библиотек, потому что с ними более удобно или привычно работать.
То есть – если Вы работаете с несколькими проектами, для которых нужны разные версии разных приложений – Вам не нужно каждый раз все переустанавливать, а просто создать виртуальное окружение, необходимое для конкретного проекта. Ну а для того, чтобы знать, какие приложения и версии нужны для проекта, создается файл requirements.txt. В нем Вы можете увидеть список всех пакетов и их версий, которые нужно установить в виртуальном окружении для конкретного проекта.
Создание виртуального окружения – очень полезная особенность Python, и его использование очень помогает при работе с проектами.
Поделитесь с друзьями:
Оставьте комментарий
Для отправки комментария вам необходимо авторизоваться.
Python: виртуальное окружение, виртуальная среда
Статья расскажет, зачем нужна виртуальная среда в проектах на Python. Что это такое, как она используется, на что стоит обратить внимание.

Виртуальное окружение — для чего оно?
Язык программирования Python, как многие другие языки, обладает своим уникальным способом загрузки и хранения пакетов (модулей). Это имеет как плюсы, так и минусы. Дело в том, что есть несколько расположений, где сохраняются пакеты, установленные в системе. Большая часть их хранится в дочернем каталоге пути, а он, в свою очередь, находится в sys.prefix.
На том же Маке можно без проблем найти, где конкретно sys.prefix указывает на применение оболочки Python:

Нас интересуют в большей мере сторонние пакеты, которые установлены посредством easy_install либо pip install. В большинстве случаев они находятся в одной из директорий, на которую указывает site.getsitepackages:

Все эти нюансы следует знать, чтобы понимать ситуацию, ведь по дефолту каждый системный объект станет применять одинаковые каталоги при хранении пакетов. Может показаться, что это несущественно. Да, если речь идёт о системных пакетах, которые считаются частью стандартной библиотеки. Совсем другое дело, если речь идёт о сторонних пакетах.
Представьте простую ситуацию: у вас 2 пакета (ProjectA and ProjectB). Оба связаны зависимостью с одной и той же библиотекой — ProjectC. Если же мы начнём запрашивать различные версии ProjectC, могут возникнуть затруднения. ProjectA может запросить одну версию (1.0), а ProjectB — другую, более новую (2.0). В этом и заключается большая проблема «Питона» — он не различает версии в каталоге «site-packages».
Раз проекты хранятся с учётом их названий, различий между версиями нет, в результате чего ProjectA и ProjectB будут применять одну и ту же версию, а это не есть хорошо.
Как раз здесь на сцену и выходит виртуальное окружение (среда) Python, делая это совместно с инструментами virtualenv/ven.
Так что же такое виртуальное окружение (virtual environment)?
Основной задачей виртуального окружения в языке Python является создание изолированной среды для «Пайтон»-проектов. Что это значит: — любой проект способен иметь собственные зависимости; — зависимости второго проекта не оказывают влияния на зависимости первого и наоборот.
Если вернуться к примеру выше, становится очевидным, что следует просто разделить виртуальные окружения для ProjectA и ProjectB. В итоге каждая отдельная среда будет зависеть от любой версии ProjectC и не зависеть друг от друга.
Профит налицо, ведь отсутствуют ограничения на то, во скольких экземплярах будет виртуальное окружение, ведь они являются обычными директориями, где содержится несколько скриптов. А ещё их довольно легко создать, используя средства командной строки — речь идёт об инструментах virtualenv либо pyenv для Python.
Применение виртуальной среды
Если у вас Python 3, модуль venv должен быть уже установлен. Если же нет, вопрос можно решить, выполнив установку Python-инструмента virtualenv посредством pip:

Внимание! Следует понимать, что venv и virtualenv — это, по сути, 2 разных инструмента, имеющих несколько различий в плане команд.
Создадим новый каталог, с которым потом станем работать, следующей командой:

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

Внимание! По дефолту ни один из существующих сторонних пакетов не включён.
В Python 3 подход venv имеет преимущество, вынуждающее применять определённую версию Python-интерпретатора, который нужен для создания виртуальной среды. Зато вы избежите проблем, выясняя, какая именно инсталляция «Пайтон» базируется в новом виртуальном окружении.
Начиная с версий 3.3 и 3.4, рекомендуется создавать окружение посредством pyvenv в командной строке (данный инструмент также включён в инсталляционный пакет «Пайтона» по дефолту). Но уже с 3.6 и далее потребуется python3 -m venv.
В вышеуказанном примере данная команда создаст каталог «env», структура которого будет выглядеть приблизительно так:

Разберём, что в папках, подробнее: • bin – это файлы, взаимодействующие с виртуальным окружением; • include – это С-заголовки, которые компилируют Python-пакеты; • lib – это копия Python-версии совместно с папкой «site-packages», где находится каждая зависимость.
Идём дальше. У нас в наличии копии (символические ссылки) ряда Python-инструментов. Данные файлы применяются, чтобы команды и «Пайтон»-код выполнялись в контексте созданной среды, что позволяет достичь изоляции от глобальной среды.
Весьма интересны скрипты activate, находящиеся в bin. Они применяются в целях настройки вашей оболочки для применения исполняемого файла окружения «Пайтон» и его сайтовых пакетов по дефолту.
Для использования этих пакетов среды в условиях изоляции, надо их активировать, выполнив активацию простой командой:

Здесь важно учесть, что ваше приглашение командной строки уже носит префикс вашего окружения (для нашего примера это env). Речь идёт об индикаторе, свидетельствующем, что в данный момент времени env активен. Это, в свою очередь, подтверждает то, что выполнимые «Пайтон»-файлы задействуют пакеты и настройки лишь из этого виртуального окружения.
Если надо показать изолированный пакет, что называется, в деле, подойдёт модуль bcrypt. Давайте скажем, что он установлен где-то в системе, а не в нашем виртуальном окружении.
Перед проверкой вернёмся назад в контекст «system» с помощью команды deactivate:

Теперь сеанс оболочки вернулся в нормальное состояние, а команда python будет ссылаться на общую Python-инсталляцию. Сделать это можно, когда заблагорассудиться, но после того, как закроете определённое виртуальное окружение. Далее следует установить bcrypt и воспользоваться им в целях хэширования пароля:

А теперь давайте посмотрим, что случится, если попробовать ту же самую команду, когда виртуальное окружение активно:

Видно, что поведение команды python -c «import bcrypt…» меняется после вызова source env/bin/activate. Если в одном примере мы имеем доступный нам bcrypt, то в другом — нет. Это и является тем типом разделения, который нам нужен для создания виртуального окружения, его запуска и работы, то есть мы к нему и пришли.