Виртуальная среда Python: virtualenv для начинающих

Почему виртуальные среды в Python так важны для разработчика? Без них невозможно избежать конфликтов версий библиотек. В этой статье мы подробно разберем, как создать и использовать virtualenv - инструмент для изолированной среды Python.

1. Что такое virtualenv и зачем он нужен

Virtualenv - это инструмент для создания изолированных виртуальных окружений Python. Каждая виртуальная среда имеет собственную установку Python и набор библиотек, независимую от других сред.

Зачем нужен virtualenv?

  • Позволяет устанавливать разные версии библиотек для разных проектов
  • Избегает конфликтов между зависимостями проектов
  • Изолирует проекты друг от друга и от глобальной среды
  • Упрощает развертывание проектов на разных машинах

Без virtualenv при глобальной установке библиотек возникают следующие проблемы:

  1. Сложно отследить, какие версии библиотек используются в проектах
  2. Проекты могут конфликтовать из-за разных версий одних и тех же библиотек
  3. Переустановка библиотек для одного проекта может сломать другие проекты

Например, 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.

Комментарии