Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Пакеты PyPI не входят в стандартную библиотеку:

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

    Он работает, устанавливая кучу файлов в каталоге (например: env/), а затем изменяя PATH среды PATH чтобы префикс ее с помощью специального каталога bin (например: env/bin/). Точная копия двоичного python3 python или python3 помещается в этот каталог, но Python запрограммирован на поиск библиотек по отношению к первому пути в каталоге среды. Он не является частью стандартной библиотеки Python, но официально благословлен PyPA (Python Packaging Authority). После активации вы можете устанавливать пакеты в виртуальной среде с помощью pip.

  • pyenv используется для изоляции версий Python. Например, вы можете протестировать свой код на Python 2.6, 2.7, 3.3, 3.4 и 3.5, так что вам понадобится способ переключения между ними. После активации он ~/.pyenv/shims PATH среды PATH с помощью ~/.pyenv/shims, где есть специальные файлы, соответствующие командам Python (python, pip). Это не копии команд, отгруженных Python; это специальные скрипты, которые на лету решают, какую версию Python запускать на PYENV_VERSION переменной среды PYENV_VERSION, или .python-version, или файла ~/.pyenv/version. pyenv также упрощает процесс загрузки и установки нескольких версий Python, используя команду pyenv install.

  • pyenv-virtualenv - это плагин для pyenv того же автора, что и pyenv, чтобы вы могли одновременно использовать pyenv и virtualenv. Однако, если вы используете Python 3.3 или более поздней pyenv-virtualenv, pyenv-virtualenv попытается запустить python -m venv если он будет доступен, а не virtualenv. Вы можете использовать virtualenv и pyenv вместе без pyenv-virtualenv, если вы не хотите удобных функций.

  • virtualenvwrapper - это набор расширений для virtualenv (см. документы). Он дает вам команды вроде mkvirtualenv, lssitepackages и особенно workon для переключения между различными каталогами virtualenv. Этот инструмент особенно полезен, если вам нужно несколько каталогов virtualenv.

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

  • pipenv, автор Kenneth Reitz (автор requests), является самым новым проектом в этом списке. Он предназначен для объединения Pipfile, pip и virtualenv в одну команду в командной строке. Каталог virtualenv обычно помещается в ~/.local/share/virtualenvs/XXX, причем XXX является хешем пути каталога проекта. Это отличается от virtualenv, где каталог обычно находится в текущем рабочем каталоге.

    В Python Packaging Guide рекомендуется pipenv приложения для разработки приложений Python (в отличие от библиотек). Кажется, что нет никаких планов по поддержке venv вместо virtualenv (# 15). Смутно, его параметр командной строки --venv относится к каталогу virtualenv, а не venv, и аналогично переменная окружения PIPENV_VENV_IN_PROJECT влияет на местоположение каталога virtualenv, а не на каталог venv (# 1919).

Стандартная библиотека:

  • pyvenv - это сценарий, поставляемый с Python 3, но устаревший в Python 3.6, поскольку у него были проблемы (не говоря уже о запутанном имени). В Python 3. 6+ точным эквивалентом является python3 -m venv.

  • venv - это пакет, поставляемый с Python 3, который вы можете запускать с помощью python3 -m venv (хотя по некоторым причинам некоторые дистрибутивы разделяют его на отдельный дистрибутив, такой как python3-venv на Ubuntu/Debian). Он служит аналогичной цели для virtualenv и работает очень схожим образом, но ему не нужно копировать двоичные файлы Python (кроме Windows). Используйте это, если вам не нужно поддерживать Python 2. На момент написания письма сообщество Python, похоже, было довольным virtualenv и я не слышал много разговоров о venv.

Большинство этих инструментов дополняют друг друга. Например, pipenv интегрирует pip, virtualenv и даже pyenv если это необходимо. Единственными инструментами, которые являются истинными альтернативами друг другу, являются venv и virtualenv.

Рекомендация для начинающих:

Это моя личная рекомендация для начинающих: начните с изучения virtualenv и pip, инструментов, которые работают как с Python 2 и 3, так и в самых разных ситуациях, и возьмите другие инструменты, как только начнете их использовать.

Ответ 2

Я бы просто избегал использования virtualenv после Python3. 3+ и вместо этого использовал стандартную отправленную библиотеку venv. Чтобы создать новую виртуальную среду, введите:

$ python3 -m venv <MYVENV>  

virtualenv пытается скопировать двоичный файл Python в каталог виртуальной среды bin. Однако он не обновляет ссылки на файлы библиотек, встроенные в этот двоичный файл, поэтому, если вы создаете Python из исходного кода в несистемный каталог с относительными именами путей, бинар Python прерывается. Так как вы делаете копию распространяемого Python, это большой недостаток. BTW для проверки ссылок на встроенные библиотеки файлов на 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 подальше от него, так как я думаю, что venv также делает то, для чего pyenv.

venv создает виртуальные среды в оболочке, которые являются свежими и изолированными, с устанавливаемыми пользователем библиотеками, и это безопасно для нескольких питонов. Свежий, потому что виртуальные среды начинаются только со стандартных библиотек, которые поставляются с python, вам нужно снова установить любые другие библиотеки с pip install пока виртуальная среда активна. Песочница, потому что ни одна из этих новых установочных библиотек не виден вне виртуальной среды, поэтому вы можете удалить всю среду и начать заново, не беспокоясь о влиянии на базовую установку python. Устанавливаемые пользователем библиотеки, потому что целевая папка виртуальной среды создается без sudo в некотором каталоге, который у вас уже есть, поэтому вам не понадобятся разрешения sudo для установки в него библиотек. Наконец, он безопасен с несколькими питонами, поскольку при активации виртуальных сред оболочка видит только версию python (3.4, 3.5 и т.д.), Которая была использована для создания этой виртуальной среды.

pyenv похож на venv поскольку он позволяет управлять несколькими средами python. Однако с pyenv вы не можете удобно pyenv библиотечную установку до некоторого состояния запуска, и вам, скорее всего, понадобятся права admin в какой-то момент для обновления библиотек. Поэтому я считаю, что лучше всего использовать venv.

За последние пару лет я обнаружил множество проблем в системах сборки (пакеты emacs, автономные разработчики приложений python, установщики...), которые в конечном итоге сводятся к проблемам с virtualenv. Я думаю, что python станет лучшей платформой, когда мы устраним эту дополнительную опцию и venv использовать только venv.

Ответ 3

Python Docs рекомендует использовать venv поверх pyenv. Из документов:

Примечание. Начиная с версии Python 3.6 сценарий pyvenv устарел, поскольку в нем используется python3 -m venv, чтобы предотвратить возможную путаницу в отношении того, на каком интерпретаторе Python будет основана виртуальная среда.

Ссылка: https://docs.python.org/3/library/venv.html