Python 3.3 включает в свою стандартную библиотеку новый пакет venv
. Что он делает, и как он отличается от всех других пакетов, которые, кажется, соответствуют регулярному выражению (py)?(v|virtual|pip)?env
?
1028
Python 3.3 включает в свою стандартную библиотеку новый пакет venv
. Что он делает, и как он отличается от всех других пакетов, которые, кажется, соответствуют регулярному выражению (py)?(v|virtual|pip)?env
?
virtualenv
иpyenv
не выполняют ту же функцию, и не являются альтернативами друг другу. Смотри мой ответ.Ответы:
Пакеты PyPI не входят в стандартную библиотеку:
virtualenv
это очень популярный инструмент, который создает изолированные среды Python для библиотек Python. Если вы не знакомы с этим инструментом, я настоятельно рекомендую изучить его, так как это очень полезный инструмент, и я буду сравнивать его до конца этого ответа.Он работает, устанавливая несколько файлов в каталоге (например:)
env/
, а затем изменяяPATH
переменную среды, добавляя к ней префикс собственногоbin
каталога (например:)env/bin/
. Точная копия двоичногоpython
илиpython3
находится в этом каталоге, но Python запрограммирован для поиска библиотек относительно его пути в каталоге среды. Он не является частью стандартной библиотеки Python, но официально благословлен PyPA (Python Packaging Authority). После активации вы можете устанавливать пакеты в виртуальной среде, используяpip
.pyenv
используется для изоляции версий Python. Например, вы можете проверить свой код на Python 2.7, 3.6, 3.7 и 3.8, поэтому вам потребуется способ переключения между ними. После активации он префиксPATH
переменной среды~/.pyenv/shims
, где есть специальные файлы, соответствующие командам Python (python
,pip
). Это не копии команд Python; это специальные сценарии, которые на лету решают, какую версию Python запускать, основываясь наPYENV_VERSION
переменной окружения, или.python-version
файле, или~/.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
стремится объединитьPipfile
,pip
иvirtualenv
в одну команду в командной строке.virtualenv
Каталог , как правило , получает помещается в~/.local/share/virtualenvs/XXX
сXXX
будучи хэш путь директории проекта. Это отличается от тогоvirtualenv
, где каталог обычно находится в текущем рабочем каталоге.pipenv
предназначен для использования при разработке приложений Python (в отличие от библиотек). Существуют альтернативыpipenv
, такие какpoetry
, которые я не буду здесь перечислять, поскольку этот вопрос касается только пакетов с одинаковыми именами.Стандартная библиотека:
pyvenv
это скрипт, поставляемый с Python 3, но устарел в Python 3.6, так как у него были проблемы (не говоря уже о запутанном имени). В Python 3.6+ точным эквивалентом являетсяpython3 -m venv
.venv
это пакет, поставляемый с Python 3, который вы можете запустить с помощьюpython3 -m venv
(хотя по некоторым причинам некоторые дистрибутивы разделяют его на отдельный пакет дистрибутивов, например, вpython3-venv
Ubuntu / Debian). Он служит для той же целиvirtualenv
, но имеет только подмножество своих функций ( см. Сравнение здесь ).virtualenv
продолжает быть более популярным, чемvenv
, тем более что первый поддерживает Python 2 и 3.Рекомендации для начинающих:
Это моя личная рекомендация для начинающих: начните с изучения
virtualenv
иpip
инструментов, которые работают как с Python 2 и 3, так и в различных ситуациях, и подбирайте другие инструменты, как только они вам понадобятся.источник
venv
действительно ли эта проблема решена?venv
вы сможете легче перейти на новую версию Python.Я бы просто избегал использования
virtualenv
после Python3.3 + и вместо этого использовал стандартную библиотекуvenv
. Чтобы создать новую виртуальную среду, вы должны набрать:virtualenv
пытается скопировать двоичный файл Python в каталог bin виртуальной среды. Однако он не обновляет ссылки на библиотечные файлы, встроенные в этот двоичный файл, поэтому, если вы собираете Python из исходного кода в несистемный каталог с относительными именами путей, двоичный код Python разрывается. Поскольку именно так вы делаете копируемый распространяемый Python, это большой недостаток. Кстати, чтобы проверить ссылки на файлы встроенной библиотеки на OS X, используйтеotool
. Например, в вашей виртуальной среде введите:Следовательно, я бы избегал
virtualenvwrapper
иpipenv
.pyvenv
устарел.pyenv
Кажется, часто используется там, гдеvirtualenv
используется, но я бы держался от этого подальше, так как я думаю, чтоvenv
также делает то,pyenv
для чего создан.venv
создает виртуальные среды в оболочке, которые являются свежими и изолированными , с настраиваемыми пользователем библиотеками и безопасными для нескольких Python . Свежесть, потому что виртуальные среды начинаются только со стандартных библиотек, которые поставляются с Python, вам придется заново устанавливать любые другие библиотеки,pip install
пока виртуальная среда активна. Песочница, потому что ни одна из этих новых библиотек не видна за пределами виртуальной среды, поэтому вы можете удалить всю среду и начать заново, не беспокоясь о том, как повлияет на вашу базовую установку Python. Пользовательские библиотеки, потому что целевая папка виртуальной среды создается безsudo
в каком-то каталоге у вас уже есть, поэтому вам не понадобятсяsudo
разрешения для установки в него библиотек. Наконец, он безопасен для нескольких Python , поскольку при активации виртуальных сред оболочка видит только версию Python (3.4, 3.5 и т. Д.), Которая использовалась для создания этой виртуальной среды.pyenv
похоже наvenv
то, что позволяет управлять несколькими средами Python. Однакоpyenv
вы не можете удобно откатить установку библиотеки до некоторого начального состояния, и вам, вероятно, понадобятсяadmin
привилегии для обновления библиотек. Поэтому я думаю, что это также лучше всего использоватьvenv
.За последние пару лет я обнаружил много проблем в системах сборки (пакеты emacs, сборщики автономных приложений Python, установщики ...), которые в конечном итоге сводятся к проблемам
virtualenv
. Я думаю, что Python станет лучшей платформой, если мы исключим эту дополнительную опцию и будем использовать только ееvenv
.источник
add2virtualenv
настраивает вашPYTHONPATH
, добавив пользовательский_virtualenv_path_extensions.pth
файл вsite-packages
. В качестве альтернативы вы можете обновитьPYTHONPATH
переменную среды вbin/activate
файле, который вы вызываете при каждой активации виртуальной среды. Или вы можете добавить символические ссылки,site-packages
чтобы указать на дополнительные каталоги. Обе эти альтернативы более прозрачны для традиционных инструментов командной строки, которые разработчики широко используют для устранения неполадок. Использование обычая.pth
с недокументированным именем делает его более волшебным IMO.PYTHONPATH
устраняет необходимостьadd2virtualenv
. Что касается отсутствия помощи по SO из вашего первого комментария, мое единственное предложение - ответы upvote, если они решат вашу проблему, чтобы мотивировать людей на устранение неполадок для вас, когда вы публикуете? Полчаса расследования + написание в обмен на щелчок мышью? Звучит как хорошая сделка ...pyvenv
рекомендуетсяpyenv
. Это так легко спутать с названиями этих инструментов.Я спустился в
pipenv
кроличью нору ( это действительно глубокая и темная дыра ... ), и, поскольку последний ответ более 2 лет назад , я счел полезным обновить обсуждение последними разработками по теме виртуальных конвертов Python, которую я нашел.ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:
Этот ответ НЕ о продолжении бурных дебатов о преимуществах pipenv по сравнению с venv в качестве решений для конвертов - я не поддерживаю ни того, ни другого . Речь идет о PyPA утверждения конфликтующих стандартов и как развития будущего virtualenv обещания свести на нет , сделав или / или выбор между ними на всех. Я сосредоточился на этих двух инструментах именно потому, что они были помазаны PyPA .
venv
Как отмечает OP, venv - это инструмент для виртуализации сред. НЕ стороннее решение, а нативный инструмент. PyPA Подтверждает venv для создания ВИРТУАЛЬНЫХРЕНТГЕНОВСКИХ КОНВЕРТОВ : « Изменено в версии 3.5: Использование venv теперь рекомендуются использовать для создания виртуальных сред ».
pipenv
pipenv - как и venv - может использоваться для создания виртуальных конвертов, но дополнительно включает функцииуправления пакетами и проверки уязвимостей . Вместо использования
requirements.txt
,pipenv
обеспечивает управление пакетамипомощью Pipfile . Как PyPA одобряет pipenv для управления пакетами , которыепредставляется, подразумеваетpipfile
, чтобы подменятьrequirements.txt
.ОДНАКО : pipenv использует virtualenv в качестве инструмента для создания виртуальных конвертов, а НЕ venv, который одобрен PyPA в качестве инструмента для создания виртуальных конвертов.
Противоречивые стандарты:
Таким образом, если решение с виртуальной оболочкой было недостаточно сложным, у нас теперь есть PyPA, поддерживающая два разных инструмента, которые используют разные решения с виртуальной оболочкой. Яростные дебаты Github о venv vs virtualenv, которые подчеркивают этот конфликт, можно найти здесь .
Решение конфликта:
Дискуссия о Github, на которую ссылается вышеупомянутая ссылка, направила развитие virtualenv в направлении размещения venv в будущих выпусках :
Вывод:
Похоже, что в будущем между двумя конкурирующими решениями с виртуальными конвертами произойдет сближение, но на данный момент pipenv - который использует
virtualenv
- существенно отличается отvenv
.Учитывая проблемы, которые решает pipenv, и тот факт, что PyPA дал свое благословение, у него, похоже , светлое будущее. И если virtualenv справляется с поставленными задачами развития, выбор решения с виртуальной оболочкой больше не должен рассматриваться как pipenv ИЛИ venv .
источник
Апрель 2020 Обновление
Я искал то же самое, когда наткнулся на этот пост . Я думаю, что вопрос о том, какой инструмент использовать, довольно запутан и труден для новых пользователей Python, таких как я. Это прямо с сайта PyPA относительно pipenv:
источник
pipenv
группу выпустила 2 версии для PyPI:2020.5.28
и совсем недавно2020.6.2
: pypi.org/project/pipenv/#history