Python

В этой статье я хочу поделиться инструментами для создания виртуального окружения в Python, а также разобрать их преимущества и недостатки.

Различные инструменты для создания виртуального окружения в Python


1. virtualenv

Преимущества:
Легкость модернизации с помощью pip и работа с различными версиями Python. Также поддерживает Python 2.7+.

Недостатки:
Двоичный файл интерпретатора Python копируется в новое место расположения, в котором он будет доступен для чтения. Помимо этого, необходима отдельная установка для Python.

Примечание: virtualenv можно использовать с virtualenvwrapper.

2. Python Environment Wrapper (pew)

pew выступает в качестве упаковщика и используется для любой команды. Подробную информацию можно посмотреть в документации.

Преимущества:
Упрощает работу с виртуальными окружениями. С помощью этой команды можно создать новое окружение, установить список пакетов и активировать окружение.

Недостатки:
Главная проблема заключается в ограничении поддержки. Последнее изменение в коде было внесено в марте 2018, почти год назад.

3. venv

venv также используется для установки и получения доступа к виртуальным окружениям. Приобрел популярность, начиная с Python 3.5. Здесь можно ознакомиться с документацией.

Преимущества:
Генерирует файл конфигурации, который распознается двоичным файлом Python, и не требует копирования бинарного файла в новое место. Более того, активно поддерживается со стороны разработчиков Python.

Недостатки:
Не подходит для версий Python до 3.3.

4. pipenv

Благодаря этому инструменту работа с Python и Виртуальными Окружениями выходит на новый уровень, поскольку он сочетает в себе поддержку управления пакетами и окружением. Документацию можно посмотреть здесь.

Преимущества:
Легко указать окружение, с которым вы работаете. Помимо этого, с его помощью можно создать отдельные секции для окружения, такие как production и test-development.

Недостатки:
Требует отдельной загрузки с помощью pip

Все эти инструменты помогут в решении проблемы. С их помощью легко создать Виртуальное Окружение. Просто выберите любой и научитесь с ним работать.

В качестве лучшего инструмента для создания виртуальных окружений я выбрал pipenv. Рассмотрим его базовые особенности.

pipenv

Для установки pipenv с помощью brew используйте следующую команду.

brew install pipenv

Создание Окружения

После установки pipenv начинается работа с окружением. Его можно создать в любой папке. Я выбрал pipenvProject. Просто установите любой пакет внутри папки. Используем requests. Он автоматически установит окружение и создаст Pipfile и Pipfile.lock.

cd pipenvProject
pipenv install requests
запросы для установки pipenv

В директории будут созданы два файла. Pipfile, включающий список пакетов, версию Python и прочую информацию. Файл блокировки (lock file) генерируется в качестве Pipfile.lock.

Pipfile
Pipfile.lock

Для активации окружения используется pipenv shell. Теперь мы находимся в Виртуальном Окружении. Чтобы заглянуть внутрь Python и проверить наличие пакетов с помощью import requests, используется команда python. Если ошибок нет, это значит, что пакет успешно установлен.

Inside environment

Выйти из окружения можно с помощью exit. После закрытия окружения невозможно получить доступ к пакету requests.

Outside environment

Запустить команды можно прямо внутри окружения без вызова shell. Для этого используется команда run. Таким образом, для запуска Python можно использовать следующую команду:

pipenv run python

Совместимость с пользователями non-pipenv

Каждый раз при установке пакетов в Python мы указываем список в файле под названием requirements.txt. Затем просто запускаем приведенную ниже команду и устанавливаем все пакеты сразу.

pip install -r requirements.txt

При работе с pipenv существует метод для создания текста к этому файлу. Просто используйте команду:

pipenv lock -r
Требования к текстовому файлу

Отобразится текст для файла requirements.txt, который могут использовать другие.

Удаление Окружения

Окружение можно легко удалить с помощью команды pipenv —-rm и создать снова, используя pipenv shell.

Однако файлы в каталоге останутся на месте. Чтобы избавиться от них, нужно удалить каталог.

cd ..
rm -r pipenvProject

Заключение

Мы рассмотрели современные инструменты для создания виртуального окружения с Python, включая pew, venv и pipenv, а также их преимущества и недостатки.

Бонус:

Traceback (most recent call last):
File "/usr/local/bin/pew", line 7, in <module>
from pew.pew import pew
File "/usr/local/lib/python2.7/site-packages/pew/__init__.py", line 11, in <module>
from . import pew
File "/usr/local/lib/python2.7/site-packages/pew/pew.py", line 36, in <module>
from pew._utils import (check_call, invoke, expandpath, own, env_bin_dir,
File "/usr/local/lib/python2.7/site-packages/pew/_utils.py", line 22, in <module>
encoding = locale.getlocale()[1] or 'ascii'
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 564, in getlocale
return _parse_localename(localename)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 477, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

Если у вас появятся трудности при создании Виртуального Окружения и возникнет ошибка, то это можно легко исправить. Создайте файл .bash_profile с командой touch в главном каталоге. Затем откройте в редакторе (я использую vim).

touch ~/.bash_profile
vim .bash_profile

Добавьте две следующие строки, сохраните и перезапустите терминал. Проблема решена.

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

Перевод статьи Karan Bhanot: Comparing Python Virtual Environment tools