В чем разница между venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv и т. д.?
Python 3.3 включает в свою стандартную библиотеку новый пакет venv. Что он делает, и как он отличается от всех других пакетов, которые, кажется, соответствуют регулярному выражению (py)?(v|virtual|pip)?env?
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