DJango стоит ли использовать виртуальное окружение в своей работе

DJango

venv

Стоит ли использовать виртуальное окружение в своей работе — однозначно да. Это мощный и удобный инструмент изоляции проектов друг от друга и от системы.

Для создания виртуального окружения, перейдите в директорию своего проекта и выполните:

python -m venv venv
Флаг -m указывает Python-у запустить venv как исполняемый модуль.
venv/ — название виртуального окружения (где будут храниться ваши библиотеки).

В результате будет создан каталог venv/ содержащий копию интерпретатора Python, стандартную библиотеку и другие вспомогательные файлы.

python -m venv venv

Активация

Чтобы начать пользоваться виртуальным окружением, необходимо его активировать:

venv\Scripts\activate.bat - для Windows;
source venv/bin/activate - для Linux и MacOS.

source выполняет bash-скрипт без запуска дополнительного bash-процесса.

Проверить успешность активации можно по приглашению оболочки. Она будет выглядеть так:

(venv) root@purplegate:/var/test#

Альтернативы venv

На данный момент существует несколько альтернатив для venv:

  • pipenv - это pipfile, pip и virtualenv в одном флаконе;
  • pyenv - простой контроль версий Питона;
  • poetry - новый менеджер для управления зависимостями;
  • autoenv - среды на основе каталогов;
  • pew - инструмент для управления несколькими виртуальными средами, написанными на чистом Python;
  • rez - интегрированная система конфигурирования, сборки и развертывания пакетов для программного обеспечения.

pipenv является официально рекомендуемым

Pipenv — современный менеджер зависимостей для Python-проектов

Можно забыть про pip и virtualenv

Вам больше не нужно использовать pip и virtualenv по отдельности. В pipenv этот функционал реализован “из коробки”.

Requirements.txt больше не нужен
Для своей работы менеджер использует 2 файла: Pipfile (по сути замена requirements.txt) и Pipfile.lock (связывает версии пакетов, тем самым обеспечивая дополнительную безопасность).

Когда вы запускаете проект с Pipenv, он автоматически создает виртуальную среду для текущего проекта, даже если вы еще не используете ее. Pipenv управляет зависимостями, отказавшись от привычного requirements.txt, и заменяя его на новый документ под названием Pipfile. Когда вы устанавливаете библиотеку с помощью Pipenv, файл Pipfile для проекта автоматически обновляется с указанием сведений об этой установке, включая информацию о версии, расположение хранилища Git, путь к файлу и другую информацию.

Автоматизация рутинных задач

Больше не придется тратить время на выполнение рутинных задач, выискивая причины отсутствия синхронизации и возникновения ошибок в версиях. Всю рутинную работу pipenv берет на себя:

  • автоматически генерирует Pipfile;
  • автоматически удаляет/добавляет записи в Pipfile при установке/удалении пакетов;
  • автоматически создает virtualenv;
  • автоматически подгружает данные из .env файлов и т.д.

Установка

pip install pipenv

Пример использования

Рассмотрим простой пример использования pipenv.

Создаем виртуальную среду

Для инициализации виртуальной среды Python 3, выполните команду:

pipenv shell

Если виртуальной среды еще не существует, она будет создана.

Также вы можете принудительно создать среду Python 3 или Python 2. Для этого нужно выполнить команды pipenv --three или pipenv --two.

Устанавливаем пакеты

Далее можно установить сторонний пакет. Существует 3 варианта установки:

Вариант #1. Указываем пакет, который нужно установить
pipenv install scrapy

Установится последняя версия пакета.
При этом в Pipfile добавится запись scrapy = “*”

Вариант #2. Не указываем пакет (установка пакетов из Pipfile)
pipenv install

Установятся все пакеты из Pipfile и обновится Pipfile.lock

Вариант #3. Не указываем пакет (установка пакетов из Pipfile.lock)
pipenv sync

Установятся все пакеты из Pipfile.lock

Запускаем скрипты

Запустить python-скрипты можно несколькими способами:

Способ #1. Активируем виртуальное окружение командой pipenv shell, далее выполняем python script-name.py
Способ #2. Запустить скрипт сразу внутри оболочки virtualenv можно командой:
pipenv run python script-name.py