В чем разница между venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv и т. д.?



Python 3.3 включает в свою стандартную библиотеку новый пакет venv. Что он делает, и как он отличается от всех других пакетов, которые, кажется, соответствуют регулярному выражению (py)?(v|virtual|pip)?env?

819   2  

2 ответов:

пакеты PyPI не в стандартной библиотеке:

  • virtualenv это очень популярный инструмент, который создает изолированные среды Python для библиотек Python. Если вы не знакомы с этим инструментом, я настоятельно рекомендую изучать его, так как это очень полезный инструмент, и я буду делать сравнения с ним для остальной части этого ответа.

    он работает, устанавливая кучу файлов в каталог (например:env/), а затем изменение PATH переменная окружения, чтобы префикс его с пользовательским (например: env/bin/). Точная копия!--5--> или python3 двоичный файл помещается в этот каталог, но 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 (см. документы). Он дает Вам команды, как mkvirtualenv,lssitepackages и особенно workon для переключения между различными virtualenv справочники. Этот инструмент особенно полезен, если вы хотите несколько virtualenv справочники.

  • pyenv-virtualenvwrapper - это плагин для pyenv тот же автор, что и pyenv, чтобы удобно интегрировать virtualenvwrapper на pyenv.

  • pipenv, Кеннет Рейц (автор requests), является самым новым проектом в этом списке. Он стремится объединить Pipfile,pip и virtualenv в одну команду командная строка. Элемент 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.

Comments

    Ничего не найдено.