В чем разница между venv и virtualenv?
venv, это встроенный инструмент,virtualenvнужно отдельно устанавливатьvenvсоздает окружение дольше, чемvirtualenv
Есть ли еще разница? (русскоязычных тем по этому вопросу не нашел)
Ответы (1 шт):
Перевод с enSO самый оценный ответ с последними правками от 27.06.2021
Рекомендации для новичков
Это персональная рекомендация от автора ответа: начните обучение с virtualenv и pip - инструменты, которые работают с обеими версиями Python 2 и 3 и в различных ситуациях и беритесь за другие, как только они вам понадобятся.
PyPI модули нестандартной библиотеки
virtualenvочень популярный инструмент для создания изолированного окружения для Python библиотек. Если вы еще не знакомы с данным иснтрументом, то я вам настоятельно рекомендую изучить его. Я буду сравнивать с данным инструментом до конца ответа.
Это работает как установка группы файлов в директорию (например: env/), а затем модифицируется переменная среды PATH добавлением к ней префикса пользовательской директории bin (например: env/bin/). Точная копия бинарников python или python3 распологается в данной директории и Python запрограммирован так, что сначала ищет библиотеки относительно данного пути, в директории окружения. Данный инструмент не является частью стандартной библиотеки Python, но официально благославлена PyPa (Python Packaging Authority). Единожды активировав, вы можете устанавливать пакеты в виртуальное пространство, используя pip.
pyenvиспользуется для изолирования версий python. К примеру, вы хотели бы протестировать ваш код на Python 2.7, 3.6, 3.7 и 3.8, тогда вам бы понадобилось решение для переключения между ними. После активации, к переменной окруженияPATHдобавляется~/.pyenv/shims, где находятся специальные файлы сопоставления команд Python (python,pip). Это не копии команд, поставляемых с Python, а специальные скрипты, которые на лету решают какую версию Python запустить, основываясь наPYENV_VERSION-переменной среды, либо на.python-version-файле, либо~/.pyenv/versionфайле.pyenvтак же облегчает процессы скачивания и установки нескольких версий Python при использовании командыpyenv install.pyenv-virtualenvявляется плагином дляpyenv, от того же автора что иpyenvи позволяет удобно использоватьpyenvиvirtualenvодновременно. Однако, если вы используете Python 3.3 или выше, тоpyenv-virtualenvбудет пробовать запускатьpython -m venv, если таковое доступно, иначеvirtualenv. Вы можете использоватьvirtualenvиpyenvвместе, безpyenv-virtualenv, если вы не нуждаетесь в удобном функционале.virtualenvwrapper- это набор расширений кvirtualenv(см. документацию). У вас появляются такие команды, какmkvirtualenv,lssitepackagesи особенноworkonдля переключения между различными каталогамиvirtualenv.Этот инструмент особенно полезен, если вам нужно несколько каталоговvirtualenv.pyenv-virtualenvwrapper- это плагин дляpyenvтого же автора, для удобной интеграцииvirtualenvwrapperвpyenv.pipenv- стремление объеденитьPipfile,pipиvirtualenvв одну команду в командной строке. Каталогvirtualenvобычно помещается в~/.local/share/virtualenvs/XXX, гдеXXXявляется хешем пути к каталогу проекта. Это отличает данный инструмент отvirtualenv, где директория обычно расположена в папке с проектом.pipenvпредназначен для использования при разработке приложений Python (в отличие от библиотек). Существуют альтернативыpipenv, такие какpoetry, которые я не буду здесь перечислять, поскольку этот вопрос касается только пакетов с аналогичными названиями.
Стандартные библиотеки
pyvenv(не путать сpyenvиз предыдущей части) - это скрипт, поставляемый с Python 3, но устарел в Python 3.6, поскольку имелись проблемы (не говоря уж о сбивающем с толку названии). В Python 3.6+, точный эквивалент -python3 -m venv.venv- это пакет поставляемый с Python 3, который вы можете запустить с помощьюpython3 -m venv(хотя по некоторым причинам некоторые дистрибутивы выделяют его в отдельный пакет, такие какpython3-venvв Ubuntu/Debian). Он служит той же цели, что иvirtualenv, но имеет только подмножество его функций (см. Сравнение здесь).virtualenvпо-прежнему более популярен, чемvenv, тем более что первый поддерживает как Python 2, так и 3.