Python venv и virtualenvwrapper объединены

В Python 3.5 рекомендуется создавать виртуальные среды с помощью venv, а не virtualenv. Тем не менее, в руководстве по упаковке Python упоминаются оба инструмента.

Однако virtualenvwrapper - рекомендуемый инструмент-обертка для использования при использовании virtualenv.

Мои вопросы тогда:

  1. Есть ли способ использовать virtualenvwrapper с venv?
  2. Или можно даже считать, что virtualenvwrapper не нужен из-за venv? (Я не могу понять, как это может быть правдой, поскольку это обертка, решающая другую проблему)

Изменить: я вижу, что есть некоторая путаница в ответах на мой вопрос. Venv - официальный эквивалент Python для virtualenv, как объяснено в ссылках выше. Многочисленные вопросы предполагают, что следует использовать venv. Как упоминалось в "дубликате", вы предложили:

введение venv отчасти является ответом на этот беспорядок. Если вы хотите помочь улучшить ситуацию, я предлагаю вам использовать venv и призывать других делать то же самое

Поэтому рекомендуется использовать venv. Но, как следует из этого вопроса, если кто-то использует venv, как он использует оболочку, как virtualenvwrapper

Ответ 1

Добавьте этот сценарий в .bashrc/.bash_profile/.zshrc, а затем включите базовое управление venv.

Кроме того, вы можете расширить скрипт, добавив следующую строку, чтобы он также отображал существующие списки venv.

lsvenv(){
    ls $VENV_HOME
}

Ответ 2

[EDIT, 8 июля 19: читатели, вероятно, обнаружат, что этот ответ дает более полное описание различных инструментов для обработки виртуальных сред в Python. У них всех есть свои проблемы, как и у conda, которая имеет несколько более сложное понятие "окружающая среда".]

  1. Как следует из названия, virtualenvwrapper был специально разработан для упаковки virtualenv, от которого он зависит. Я не верю, что у кого-то еще есть одинаково упакованный venv.

  2. venv предназначен для выполнения основной работы по созданию виртуальных сред, но управление средой должно осуществляться с помощью сценариев. Несмотря на то, что сценарии оболочки часто venv модуль venv имеет обширный API, который поможет вам в этих задачах.

В настоящее время существует множество вариантов создания виртуальных сред Python. Кроме тех, вы упоминаете, anaconda позволяет создавать и управление средами и даже работает довольно хорошо с pip большую часть времени.

Инструменты в пространстве виртуальной среды были спроектированы для максимально возможной совместной работы со стандартными инструментами распространения Python, но появление venv в Python 3.5 не сделало недействительными ни virtualenv ни virtualenvwrapper, которые оба должны работать нормально.

Модуль venv - это, в основном, простой инструментарий, позволяющий создавать virtualenv внутри программ, и он ни в коем случае не призван заменить удобство virtualenvwrapper. Это просто удовлетворяет довольно другому набору потребностей.

Ответ 3

  1. Есть ли способ использовать virtualenvwrapper с venv?

Да. Просто укажите WORKON_HOME в вашем каталоге venvs. Вот что я делаю в своем ~/.zshrc, и я использую сочетание virtualenv (редко встречающееся сейчас, только для нескольких унаследованных потребностей py2) и venv (наиболее распространенное). Я переименовал значение по умолчанию в .venvs, чтобы было ясно, что это в основном версии Python 3, а не virtualenvs.

# Python Environment Handling
export WORKON_HOME=$HOME/.venvs  # Because I am using python3 -m venv (aka pyvenv)
export PROJECT_HOME=$HOME/dev
source /usr/local/bin/virtualenvwrapper.sh  # symlinked to /Library/Frameworks/Python.framework/Versions/3.7/bin/virtualenvwrapper.sh
  1. Или можно даже считать, что virtualenvwrapper не нужен из-за venv? (Я не могу понять, как это может быть правдой, поскольку это обертка, решающая другую проблему)

venv == virtualenv (вкратце). Venv не заменяет virtualenvwrapper по той же причине, по которой его заменяет virtualenv. Ваша догадка об этом верна.

  1. Как это лучше, чем просто создать псевдоним, который будет источником активации?

Что ж, вам решать, что вам нужно, но я считаю, что virtualenvwrapper с плагинами zsh virtualenv и virtualenvwrapper довольно велики и лучше, чем необработанные псевдонимы.

workon перечислить все venvs очень приятно, затем workon speech_analyzer к нему.

  1. Другие решения?

Вы также можете установить хуки для активации venvs при смене каталога, но если это то, что вам нужно, и только это, то это, по сути, pipenv. Pipenv отлично подходит, если это все, что вы хотите сделать.

Но мне никогда не нравился этот рабочий процесс по тем же причинам, что и здесь: https://chriswarrick.com/blog/2018/07/17/pipenv-promises-a-lot-delivers-very-little/. В частности, эти потребности согласуются с моей: многопроектная единая среда: https://chriswarrick.com/blog/2018/07/17/pipenv-promises-a-lot-delivers-very-little/#nikola

У меня есть шесть сред на моей машине и около 20 проектов. Pipenv не распространяется на эту ситуацию. Pipenv настаивает на 20 средах для 20 проектов. Если вам нравится этот рабочий процесс, тогда pipenv может быть тем инструментом, который вам нужен. Одно слово предостережения, вы, к сожалению, можете сделать этот рабочий процесс только в pipenv.