В чем разница между 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 в одну команду командная строка. The virtualenv каталог обычно помещается в ~/.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.