Виртуальная среда Python: virtualenv для начинающих
Почему виртуальные среды в Python так важны для разработчика? Без них невозможно избежать конфликтов версий библиотек. В этой статье мы подробно разберем, как создать и использовать virtualenv - инструмент для изолированной среды Python.
1. Что такое virtualenv и зачем он нужен
Virtualenv - это инструмент для создания изолированных виртуальных окружений Python. Каждая виртуальная среда имеет собственную установку Python и набор библиотек, независимую от других сред.
Зачем нужен virtualenv?
- Позволяет устанавливать разные версии библиотек для разных проектов
- Избегает конфликтов между зависимостями проектов
- Изолирует проекты друг от друга и от глобальной среды
- Упрощает развертывание проектов на разных машинах
Без virtualenv при глобальной установке библиотек возникают следующие проблемы:
- Сложно отследить, какие версии библиотек используются в проектах
- Проекты могут конфликтовать из-за разных версий одних и тех же библиотек
- Переустановка библиотек для одного проекта может сломать другие проекты
Например, Project A требует django==1.11, а Project B - django==2.2. При глобальной установке этих библиотек один из проектов сломается.
В отличие от virtualenv, venv
появился в Python 3.3 и имеет меньше возможностей. Но оба инструмента решают похожие задачи по созданию изолированных окружений Python.
2. Установка virtualenv
Чтобы начать использовать virtualenv, нужно установить это расширение. Обычно это делается через pip:
pip install virtualenv
Возможны и другие способы установки:
- Через менеджер пакетов (apt, yum, brew и т.д.)
- Из исходников (скачать с GitHub, распаковать, запустить setup.py)
Помимо самого virtualenv
потребуются:
- Python
- Модуль
setuptools
- Модуль
pip
После установки можно проверить работу командой:
virtualenv --version
Если выводится номер версии - значит, все прошло успешно. Также должен появиться вывод справки по использованию virtualenv
.
При возникновении ошибок стоит проверить версию Python, наличие модулей setuptools и pip. Возможно, понадобится выполнить:
pip install --upgrade setuptools
Теперь можно приступать к созданию своей первой виртуальной среды Python.
3. Создание виртуальной среды Python
Чтобы создать виртуальную среду, используется команда virtualenv
. Укажем ей папку, куда поместить среду:
virtualenv my_env
Это создаст папку my_env
со следующей структурой:
my_env/ bin/ activate python lib/ pythonX.X/ include/ pyvenv.cfg
Где X.X
- версия Python, использованная по умолчанию. Чаще всего это системная версия Python.
Все библиотеки будут устанавливаться в каталог my_env/lib/pythonX.X/site-packages
. Этот каталог изолирован от глобальных библиотек Python.
Таким образом можно создать несколько виртуальных сред - для каждого проекта свою. Это избавит от конфликтов между проектами.
Чтобы задать другую версию Python, используется параметр -p
:
virtualenv -p /usr/bin/python3.6 my_env
Здесь указывается полный путь к нужному интерпретатору Python. Это позволяет гибко выбирать версию для каждого проекта.
Также вместо python
можно указать pypy
, python3.7
и другие варианты, если они установлены в системе.
При создании virtualenv часто возникают следующие ошибки:
- Отсутствует setuptools (ModuleNotFoundError: No module named 'setuptools') - нужно выполнить
pip install --upgrade setuptools
- Нужны права суперпользователя для установки в системные каталоги - лучше использовать
--user
или создать virtualenv в домашней директории - Неправильно указан путь к интерпретатору Python при использовании параметра
-p
Теперь виртуальная среда готова. Для начала работы в ней нужно ее активировать.
4. Активация и работа в виртуальной среде
Чтобы начать использовать virtualenv, его нужно сначала активировать. Это делается командой source bin/activate
(в Windows просто bin\activate
).
Признак активной виртуальной среды:
- Изменение приглашения командной строки. Обычно добавляется префикс с именем среды.
- Изменение результата команды
which python
. Теперь это будет python из виртуальной среды.
В активной среде можно устанавливать библиотеки через pip
и запускать скрипты командой python
.
Например, установим в среду web-фреймворк Django:
pip install django
Запустим скрипт hello.py
:
python hello.py
Все библиотеки и изменения будут храниться локально в этой виртуальной среде, не затрагивая систему.
Чтобы отключить виртуальную среду, используйте команду deactivate
. При этом среда перестанет влиять на python
и pip
.
Так можно гибко переключаться между несколькими проектами и их изолированными средами.
Работая с virtualenv нужно следить, чтобы он был активирован при установке библиотек и запуске скриптов. Иначе это может затронуть глобальную среду Python, что приведет к неожиданным ошибкам.
В следующем разделе рассмотрим более продвинутые варианты работы с виртуальными средами.
5. Управление виртуальными средами
При использовании множества виртуальных сред возникает необходимость в управлении ими.
Чтобы посмотреть список сред, используйте:
lsvirtualenv
Для переключения между средами:
workon env_name
Также virtualenv позволяет экспортировать среду в zip-архив:
zip -r env_name.zip env_name
И затем импортировать из этого архива на другой машине. Это удобно для переноса проектов.
Чтобы удалить ненужную virtualenv среду, просто удалите ее каталог.
Полезный совет - исключать каталоги виртуальных сред из системы контроля версий Git. Так проекты можно будет легко переносить на другие компьютеры.
6. Автоматизация virtualenv
Для автоматизации работы с виртуальными средами используется virtualenvwrapper.
Он предоставляет дополнительные команды:
- mkvirtualenv - создание среды
- cdsitepackages - переход в каталог сайт-пакетов среды
- cdvirtualenv - смена текущей директории на каталог виртуальной среды
Также есть автодополнение для bash и zsh, что ускоряет работу.
В целом, virtualenvwrapper делает процесс управления средами более удобным.
7. Проблемы при работе с virtualenv
Рассмотрим наиболее частые проблемы при работе с виртуальными средами Python.
1. Медленное создание среды. Это может быть связано с антивирусом, который сканирует каждый создаваемый файл. Выключите сканирование на время работы.
2. Ошибка доступа в Windows. Нужно запускать командную строку от имени администратора или создавать среды в подкаталоге пользователя, например в C:/Users/username/envs
.
3. Забыл активировать среду и что-то сломалось. Удалите глобально установленные пакеты или переустановите Python.
4. Как перенести проекты с virtualenv на другой компьютер? Создайте архив среды и разверните его на новом компьютере.
5. Где хранить виртуальные среды - в репозитории проекта или отдельно? Лучше хранить отдельно, тогда их можно будет повторно использовать.
8. Альтернативы virtualenv
Есть и другие способы создания изолированных сред Python.
- venv - стандартный модуль в Python 3
- pipenv - среда и менеджер пакетов в одном
- conda - создает среды для Python и других языков
- pyenv - позволяет легко переключать версии Python
У каждого подхода есть свои плюсы и минусы. Но virtualenv остается популярным и мощным инструментом для создания виртуальных сред Python.