Сравнение виртуальных сред Python
Недавно я опубликовал статью об использовании виртуальных сред для проектов Python. Статья была хорошо принята, и отзывы читателей открыли для меня новый взгляд. Раньше я не знал о pew
, venv
и pipenv
. Их рекомендации помогли мне узнать о последних технологиях в этой области и еще больше усовершенствовали мои знания и опыт.
После их предложений я прочитал обо всех из них. В этой статье я расскажу о новых инструментах виртуальной среды, которые я изучил, и о том, как они контрастируют друг с другом.
Различные инструменты для виртуальных сред Python
Я просмотрел различные документы и статьи и узнал, как каждая из них приносит разные вещи на стол. Мои выводы описаны ниже:
1. virtualenv
Я уже обсуждал virtualenv
в своей предыдущей статье. Вы можете проверить это здесь.
Преимущества:
Легко обновить через pip
, и можно легко работать с несколькими версиями Python. Он также поддерживает Python 2.7+.
Недостатки:
Здесь двоичный файл интерпретатора Python фактически копируется в новое место и должен быть считан оттуда. Кроме того, если вы хотите использовать его, вам придется установить его отдельно, поскольку он не входит в комплект поставки Python.
2. Python Environment Wrapper (pew)
pew
действует как оболочка, и вам нужно запомнить эту команду только после того, как вы начнете с ней работать, поскольку ее можно использовать для всех команд, которые нам могут понадобиться. Полная документация доступна здесь.
Преимущества:
Это упрощает работу с виртуальными средами. С помощью одной команды вы можете создать новую среду, установить список пакетов и активировать среду.
Недостатки:
Основная проблема, которую я заметил, это то, что его поддержка сейчас очень ограничена. Последняя фиксация кода сделана в марте 2018 года, т.е. почти год назад.
3. venv
venv
также можно использовать для настройки и доступа к виртуальным средам. Он стал рекомендованным методом для создания виртуальных сред начиная с Python 3.5. Вы можете найти его документацию здесь.
Преимущества:
Он генерирует файл конфигурации, который напрямую понимается двоичным файлом Python и не требует копирования двоичного файла в новое место. Кроме того, он поддерживается разработчиками Python.
Недостатки:
Это не для версий Python до 3.3.
4. pipenv
Этот инструмент выводит работу с Python и виртуальными средами на новый уровень, поскольку он объединяет поддержку управления пакетами и средой в одном инструменте. Документы здесь.
Преимущества:
Мы можем просто указать среду, с которой работаем. Кроме того, это позволяет нам создавать отдельные разделы для нашей среды, такие как производство и разработка для тестирования.
Недостатки:
Его нужно скачивать отдельно через pip
. Он добавляет много функций, но следует принять это, если они чувствуют, что им также потребуются дополнительные функции.
По моему опыту, эту проблему решают все различные инструменты. Каждый из них может помочь вам легко и без особых проблем создать виртуальную среду. Вы можете просто выбрать любой из них и изучить его работу.
Я определил, что pipenv
- один из лучших инструментов для работы с виртуальными средами, и он все больше набирает обороты благодаря своим дополнительным функциям. Итак, я расскажу об основах, которые помогут вам начать работу с pipenv.
pipenv
Чтобы установить pipenv с помощью brew, используйте следующую команду.
brew install pipenv
Создать среду
После установки pipenv мы можем начать работать с нашей средой. Перейдите в любую папку, в которой вы хотите создать среду. Я создам среду внутри pipenvProject
. Просто войдите в него и установите любой пакет, который вам нравится. Давайте установим запросы. Это автоматически настроит среду, создаст Pipfile
и Pipfile.lock
.
cd pipenvProject pipenv install requests
В каталоге будут созданы два файла. Pipfile
, который включает список пакетов, версию Python и другую информацию. Файл блокировки также создается как Pipfile.lock
.
Чтобы активировать эту среду, мы можем просто выполнить pipenv shell
. Теперь мы находимся в виртуальной среде. Теперь мы можем использовать команду python для входа в Python и использовать запросы на импорт, чтобы проверить, есть ли у нас пакет. Поскольку мы не получаем ошибки, это означает, что пакет установлен.
Мы можем выйти из среды с помощью exit
. Когда мы выйдем из среды, мы больше не сможем получить доступ к пакету requests
.
Мы также можем запускать команды непосредственно внутри среды без явного вызова оболочки. Для этого мы можем использовать команду запуска. Итак, если вам нужно запустить Python, используйте следующую команду:
pipenv run python
Совместимость с пользователями, не использующими pipenv
Каждый раз, когда мы устанавливаем набор пакетов в Python, мы обычно указываем список в файле с именем requirements.tx
t. Затем просто запустите команду ниже и установите все пакеты за один раз.
pip install -r requirements.txt
Итак, когда вы начинаете работать с pipenv, есть способ создать текст для этого файла. Просто используйте команду:
pipenv lock -r
Он отобразит текст нашего файла requirements.txt
, который могут использовать другие.
Удалить среду
Среду легко удалить с помощью команды pipenv --rm
. Чтобы создать его снова, используйте командную оболочку pipenv.
Однако файлы в каталоге останутся такими, какие есть. Если вы хотите полностью удалить его, удалите каталог.
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
с помощью сенсорной команды в основном каталоге. Затем откройте его в редакторе (я использую vim).
touch ~/.bash_profile vim .bash_profile
Добавьте следующие две строки, сохраните их и перезапустите терминал. Проблема будет решена.
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
Перевод статьи https://towardsdatascience.com/comparing-python-virtual-environment-tools-9a6543643a44