В чем разница между venv, pyvenv, pyenv, виртуальное окружение, virtualenvwrapper, pipenv и т. д.?
Python 3.3 включает в свою стандартную библиотеку новый пакет venv
. Что он делает и чем он отличается от всех других пакетов, которые, похоже, соответствуют регулярному выражению (py)?(v|virtual|pip)?env
?
2 ответов
пакеты PyPI не в стандартной библиотеке:
-
virtualenv
- очень популярный инструмент, который создает изолированные среды Python для библиотек Python. Если вы не знакомы с этим инструментом, я настоятельно рекомендую изучить его, поскольку это очень полезный инструмент, и я буду делать сравнения с ним для остальной части этого ответа.это работает, устанавливая кучу файлов в каталоге (например:
env/
), а затем изменениеPATH
переменная окружения для префикса с пользовательским (например:env/bin/
). Точная копия!--5--> илиpython3
binary помещается в этот каталог, но Python запрограммирован искать библиотеки относительно своего пути сначала в каталоге среды. Это не часть стандартной библиотеки Python, но официально благословлена Pypa (Python Packaging Authority). После активации пакеты можно установить в виртуальной среде с помощьюpip
. pyenv
используется для изоляции версий Python. Например, вы можете проверить свой код на Python 2.6, 2.7, 3.3, 3.4 и 3.5, поэтому вам понадобится способ переключения между ними. После активации он префиксыPATH
переменной окружения с~/.pyenv/shims
, где есть специальные файлы, соответствующие командам Python (python
,pip
). Это не копии команд, отправленных Python; это специальные скрипты это решает на лету, какую версию Python запускать на основе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
(см. docs). Он дает Вам команды, такие какmkvirtualenv
,lssitepackages
и особенноworkon
для переключения между различнымиvirtualenv
справочники. Этот инструмент особенно полезен, если вы хотите несколькоvirtualenv
справочники.pyenv-virtualenvwrapper
- это плагин дляpyenv
тем же автором, что иpyenv
, чтобы удобно интегрироватьvirtualenvwrapper
наpyenv
.-
pipenv
, Кеннет Рейц (авторrequests
), является самым новым проектом в этом списке. Он стремится объединитьPipfile
,pip
иvirtualenv
в одну команду командная строка. Thevirtualenv
каталог обычно помещается в~/.local/share/virtualenvs/XXX
СXXX
будучи хэшем пути каталога проекта. Это отличается отvirtualenv
, где каталог обычно находится в текущем рабочем каталоге.Руководство По Упаковке Python рекомендует
pipenv
при разработке Приложений на Python (в отличие от библиотек). Там не кажется будьте любые планы по поддержкеvenv
вместоvirtualenv
(#15). Смущающе, его опция командной строки--venv
относится кvirtualenv
каталог, а неvenv
, а также окружающей среды переменнаяPIPENV_VENV_IN_PROJECT
влияет на расположениеvirtualenv
каталог, а не
я бы просто не использовать virtualenv
после Python3.3+ и вместо этого используйте стандартную библиотеку venv
. Чтобы создать новую виртуальную среду, введите:
$ python3 -m venv <MYVENV>
virtualenv
пытается скопировать двоичный файл Python в каталог bin виртуальной среды. Однако он не обновляет ссылки файлов библиотеки, встроенные в этот двоичный файл, поэтому, если вы создаете Python из источника в несистемный каталог с относительными именами путей, двоичный файл Python ломается. Так как это вы делаете копию распространяемого Python, это большой недостаток. Кстати, чтобы проверить встроенные ссылки на файлы библиотеки в OS X, Используйте otool
. Например, в виртуальной среде, типа:
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
следовательно, я бы избегал virtualenvwrapper
и pipenv
. pyvenv
устарела. pyenv
кажется, часто используется где virtualenv
используется, но я бы держался подальше от него, так как я думаю venv
и не pyenv
построен для.
venv
создает виртуальные среды в оболочки, которые свежие и изолированное С устанавливаемые пользователем библиотеки, и Multi-python safe. свежие поскольку виртуальные среды начинаются только со стандартных библиотек, которые поставляются с python, вы должны установить любые другие библиотеки снова с pip install
пока виртуальная среда активна. изолированное поскольку ни одна из этих новых установок библиотеки не отображается за пределами виртуальной среда, так что вы можете удалить всю среду и начать снова, не беспокоясь о влиянии вашей базовой установки python. устанавливаемые пользователем библиотеки потому что целевая папка виртуальной среды создается без sudo
в некотором каталоге вы уже владеете, поэтому вам не понадобится sudo
разрешения на установку библиотек в него. Наконец, это Multi-python safe, так как при активации виртуальных сред оболочка видит только версию python (3.4, 3.5 так далее.) , который был использован для создания этой виртуальной среды.
pyenv
похож на venv
в том, что он позволяет управлять несколькими средами python. Однако с pyenv
вы не можете удобно откат библиотеки устанавливается в некоторое начальное состояние, и вам, вероятно, понадобится admin
привилегии в какой-то момент для обновления библиотек. Поэтому я думаю, что лучше всего использовать venv
.
за последние пару лет я обнаружил много проблем в системах сборки (пакеты emacs, python отдельные строители, монтажники...) что в конечном итоге сводится к проблемам с virtualenv
. Я думаю, что python будет лучшей платформой, когда мы исключим эту дополнительную опцию и будем использовать только venv
.