Pyenv позволяет легко переключаться между несколькими версиями Python. Это просто, ненавязчивая и следует по традиции Unix одноцелевых инструментов, которые хорошо делают одну вещь.
Этот проект был разбит от Rbenv и Ruby-Build и модифицирован для Python.
PATH
.Опция Homebrew из раздела MacOS ниже также будет работать, если у вас установлен Homebrew.
curl https://pyenv.run | bash
Для получения более подробной информации посетите наш другой проект: https://github.com/pyenv/pyenv-installer
Это заставит вас использовать последнюю версию Pyenv и упростит разветвлять и внести любые изменения вверх по течению.
$HOME/.pyenv
(но вы можете установить его где -нибудь еще): git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
Варианты из раздела Linux выше также работают, но HomeBrew рекомендуется для базового использования.
Обновите HomeBrew и установите Pyenv:
brew update
brew install pyenv
Если вы хотите установить (и обновить) последнюю руководителя Development Pyenv, а не последний выпуск, вместо этого запустите:
brew install pyenv --head
Затем следуйте остальным шагам после установки, начиная с настройки среды оболочки для Pyenv.
НЕОБЯЗАТЕЛЬНЫЙ. Чтобы исправить предупреждение brew doctor
«Конфигурация», существуют сценарии за пределами вашей системы или каталогов Homebrew »
Если вы собираетесь построить домашние формулы из источника, которые связываются с Python, таким как Tkinter или Numpy (это обычно, только если вы являетесь разработчиком такой формулы, или если у вас есть версия MacOS EOS, для которых предварительно построены бутылки Больше не предоставляется, и вы используете такую формулу).
Чтобы избежать случайного упоминания против Pyenv, предоставленного Python, добавьте следующую строку в конфигурацию вашей интерактивной оболочки:
Bash/zsh:
alias brew= ' env PATH="${PATH//$(pyenv root)/shims:/}" brew '
Рыба:
alias brew= " env PATH=(string replace (pyenv root)/shims '' "$ PATH " ) brew "
Pyenv официально не поддерживает Windows и не работает в Windows за пределами подсистемы Windows для Linux. Более того, даже там, питоны, которые он устанавливает, не являются собственными версиями Windows, а версиями Linux, работающими на виртуальной машине-поэтому вы не получите функциональность, специфичную для Windows.
Если вы находитесь в Windows, мы рекомендуем использовать вилку @Kirankotari's pyenv-win
, которая устанавливает нативные версии Python Python.
Настройка ниже должна работать для подавляющего большинства пользователей для общих вариантов использования. См. Расширенную конфигурацию для получения подробной информации и дополнительных параметров конфигурации.
Файлы стартапов Stock Bash сильно различаются между распределениями, в каком из них источника, что при каких обстоятельствах, в каком порядке и какой дополнительной конфигурации они выполняют. Таким образом, наиболее надежный способ получить Pyenv во всех средах - это добавление команд конфигурации Pyenv к обоих .bashrc
(для интерактивных оболочек) и файл профиля, который будет использовать (для оболочек входа в систему).
Сначала добавьте команды в ~/.bashrc
, запустив следующее в вашем терминале:
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bashrc
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bashrc
echo ' eval "$(pyenv init -)" ' >> ~ /.bashrc
Затем, если у вас есть ~/.profile
, ~/.bash_profile
или ~/.bash_login
, добавьте и команды там. Если у вас нет ничего из этого, создайте ~/.profile
и добавьте там команды.
~/.profile
: echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.profile
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.profile
echo ' eval "$(pyenv init -)" ' >> ~ /.profile
~/.bash_profile
: echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bash_profile
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bash_profile
echo ' eval "$(pyenv init -)" ' >> ~ /.bash_profile
ПРЕДУПРЕЖДЕНИЕ BASH : Есть некоторые системы, в которых переменная BASH_ENV
настроена на то, чтобы указывать на .bashrc
. В таких системах вы должны почти наверняка поместить eval "$(pyenv init -)"
в .bash_profile
, а не в .bashrc
. В противном случае вы можете наблюдать странное поведение, такое как pyenv
попав в бесконечную петлю. Смотрите #264 для деталей.
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.zshrc
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.zshrc
echo ' eval "$(pyenv init -)" ' >> ~ /.zshrc
Если вы хотите получить Pyenv и в неинтактирующих оболочках входа в систему, также добавьте команды в ~/.zprofile
или ~/.zlogin
.
Если у вас есть Fish 3.2.0 или новее, выполните это интерактивно:
set -Ux PYENV_ROOT $HOME /.pyenv
fish_add_path $PYENV_ROOT /bin
В противном случае выполните фрагмент ниже:
set -Ux PYENV_ROOT $HOME /.pyenv
set -U fish_user_paths $PYENV_ROOT /bin $fish_user_paths
Теперь добавьте это в ~/.config/fish/config.fish
:
pyenv init - | source
Для изменения PATH
вступить в силу.
exec " $SHELL "
Установите зависимости от сборки Python, прежде чем попытаться установить новую версию Python.
Теперь вы можете начать использовать Pyenv.
Если вы обновились с Pyenv версии 2.0.x-2.2.x
Логика запуска и инструкции были обновлены для простоты в 2.3.0. Предыдущая, более сложная схема конфигурации для 2.0.0-2.2.5 все еще работает.
PYENV_ROOT
чтобы указывать на путь, по которому Pyenv будет хранить свои данные. $HOME/.pyenv
- дефолт. Если вы установили Pyenv через Git Checkout, мы рекомендуем установить его в то же место, где вы его клонировали.pyenv
на ваш PATH
, если его еще нетeval "$(pyenv init -)"
для установки pyenv
в свою оболочку в качестве функции оболочки, включить прокладки и автозаполнениеeval "$(pyenv init --path)"
вместо этого, чтобы просто включить прокладки без интеграции оболочки Чтобы установить дополнительные версии Python, используйте pyenv install
.
Например, чтобы загрузить и установить Python 3.10.4, запустите:
pyenv install 3.10.4
Запуск pyenv install -l
дает список всех доступных версий.
ПРИМЕЧАНИЕ. Если у вас возникли проблемы с установкой версии Python, посетите страницу вики об общих проблемах сборки.
Примечание. Если вы хотите использовать Proxy для загрузки, установите переменные среды http_proxy
и https_proxy
.
Примечание. Если вы хотите более быстрый переводчик за счет более длительного времени сборки, см. Строительство для максимальной производительности в ReadMe от Python-Build.
Все подкоманды Pyenv, кроме uninstall
автоматически разрешают полные префиксы к последней версии в соответствующей строке версий.
pyenv install
выбирает последнюю известную версию, в то время как другие подкоманды выбирают последнюю установленную версию.
Например, чтобы установить, а затем переключиться на последний выпуск 3.10:
pyenv install 3.10
pyenv global 3.10
Вы можете запустить pyenv latest -k <prefix>
чтобы увидеть, как pyenv install
разрешит определенный префикс, или pyenv latest <prefix>
чтобы увидеть, как другие подкоманды будут его разрешить.
Смотрите pyenv latest
для деталей.
Для следующих выпусков Python Pyenv применяет предоставленные пользователем патчи, которые добавляют поддержку некоторых новых сред. Хотя мы не активно поддерживаем эти патчи, поскольку существующие выпуски никогда не меняются, можно с уверенностью предположить, что они будут продолжать работать до тех пор, пока не будут дальнейшие несовместимые изменения в более поздней версии этих сред.
Чтобы выбрать Pyenv-установленного Python в качестве версии для использования, запустите одну из следующих команд:
pyenv shell <version>
- выберите только для текущего сеанса оболочкиpyenv local <version>
- автоматически выбирайте, когда вы находитесь в текущем каталоге (или его подкаталогах)pyenv global <version>
- выберите глобально для вашей учетной записи пользователяНапример, чтобы выбрать вышеупомянутый вновь установленный Python 3.10.4 в качестве предпочтительной версии для использования:
pyenv global 3.10.4
Теперь всякий раз, когда вы вызовыте python
, pip
и т. Д., Выполняемый файл из установки Pyenv 3.10.4 будет запускать вместо системы Python System.
Использование « system
» в качестве имени версии сбросит выбор в ваш предоставленный системой Python.
См. Понимание прокладок и понимание выбора версий Python для получения более подробной информации о том, как работает выбор и дополнительную информацию о его использовании.
Со временем вы будете накапливать версии Python в своем каталоге $(pyenv root)/versions
.
Чтобы удалить старые версии Python, используйте pyenv uninstall <versions>
.
В качестве альтернативы, вы можете просто rm -rf
каталог версии, которую вы хотите удалить. Вы можете найти каталог определенной версии Python с командой pyenv prefix
, например pyenv prefix 2.6.8
. Обратите внимание, что плагины могут выполнять дополнительные операции на удалении, которые вам также понадобятся вручную. Например, Pyenv-Virtualenv также удаляет любые виртуальные среды, связанные с удаленной версией.
Запустите pyenv commands
чтобы получить список всех доступных подкомандов. Запустите подкоманду с помощью --help
, чтобы получить помощь на нем, или увидеть ссылку на команды.
Обратите внимание, что плагины Pyenv, которые вы устанавливаете, могут добавить свои собственные подкоманды.
Если вы установили Pyenv с помощью Homebrew, обновите, используя:
brew upgrade pyenv
Чтобы переключиться с выпуска к последнему руководителю Development Pyenv, используйте:
brew uninstall pyenv
brew install pyenv --head
Затем вы можете обновить его с помощью brew upgrade pyenv
как обычно.
Если вы установили Pyenv с Pyenv-Installer, у вас, вероятно, есть плагин Pyenv-Update, который обновил бы Pyenv и все установленные плагины:
pyenv update
Если вы установили Pyenv, используя Pyenv-Installer или Git Checkout, вы также можете обновить свою установку в любое время, используя GIT.
Чтобы перейти на последнюю версию Development Pyenv, используйте git pull
:
cd $( pyenv root )
git pull
Чтобы перейти на конкретный выпуск Pyenv, ознакомьтесь с соответствующим тегом:
cd $( pyenv root )
git fetch
git tag
git checkout v0.1.0
Простота Pyenv позволяет легко его отключить или удалить от системы.
Чтобы отключить Pyenv, управляя вашими версиями Python, просто удалите призывы pyenv init
из конфигурации запуска оболочки. Это удалит каталог Pyenv Shims из PATH
, а будущие вызовы, такие как python
выполнят версию System Python, как это было до Pyenv.
pyenv
по -прежнему будет доступен в командной строке, но ваши приложения Python не будут влиять на переключение версий.
Чтобы полностью удалить Pyenv, удалите все линии конфигурации Pyenv из конфигурации запуска оболочки, а затем удалите его корневой каталог. Это удалит все версии Python , которые были установлены в соответствии с $(pyenv root)/versions/
каталог:
rm -rf $( pyenv root )
Если вы установили Pyenv, используя диспетчер пакетов в качестве последнего шага, выполните удаление пакета Pyenv. Например, для Homebrew:
brew uninstall pyenv
Pyenv предоставляет простой способ расширить и настраивать свои функциональные возможности с помощью плагинов - так же просто, как создание каталога плагинов и сброс скрипта оболочки на определенном подлонке с любой дополнительной логикой, которую вы должны запускать в определенные моменты.
Основная идея заключается в том, что большинство вещей, которые вы можете положить под $PYENV_ROOT/<whatever>
вы также можете положить под $PYENV_ROOT/plugins/your_plugin_name/<whatever>
.
Посмотрите плагины на вики о том, как установить и использовать плагины, а также каталог некоторых полезных существующих плагинов для общих потребностей.
См. Плагины авторизации на вики на написании собственных плагинов.
На высоком уровне Pyenv перехватывает команды Python с использованием исполнителей SHIM, введенных в ваш PATH
, определяет, какая версия Python была указана вашим приложением, и передает ваши команды в соответствии с правильной установкой Python.
Когда вы запускаете команду, такую как python
или pip
, ваша оболочка (Bash / ZSHRC / ...) ищет список каталогов, чтобы найти исполняемый файл с этим именем. Этот список каталогов живет в переменной среды, называемой PATH
, с каждым каталогом в списке, разделенном толстой кишкой:
/usr/local/bin:/usr/bin:/bin
Справочники в PATH
обыскивают слева направо, поэтому соответствующий исполняемый файл в каталоге в начале списка имеет приоритет над другим в конце. В этом примере каталог /usr/local/bin
будет искать сначала, затем /usr/bin
, затем /bin
.
Pyenv работает, вставив каталог прокладки в передней части вашего PATH
:
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
Благодаря процессу, называемому перефразированием , Pyenv поддерживает прокладки в этом каталоге, чтобы соответствовать каждой команде Python в каждой установленной версии Python python
, pip
и так далее.
Протиски - это легкие исполняемые файлы, которые просто передают вашу команду в Pyenv. Итак, с установленным Pyenv, когда вы запустите, скажем, pip
, ваша операционная система сделает следующее:
PATH
для исполняемого файла с именем pip
pip
в начале вашего PATH
pip
, который, в свою очередь, передает команду в PyenvКогда вы выполняете Shim, Pyenv определяет, какую версию Python использовать, читая ее из следующих источников, в этом порядке:
Переменная среды PYENV_VERSION
(если указана). Вы можете использовать команду pyenv shell
, чтобы установить эту переменную среды в своем текущем сеансе оболочки.
Файл для конкретного приложения .python-version
в текущем каталоге (если присутствует). Вы можете изменить файл текущего каталога .python-version
с помощью pyenv local
.
Первый файл .python-version
найден (если таковой имеется) путем поиска каждого родительского каталога, до достижения корня вашей файловой системы.
Глобальный файл $(pyenv root)/version
. Вы можете изменить этот файл, используя pyenv global
. Если файл глобальной версии отсутствует, Pyenv предполагает, что вы хотите использовать Python «Система» (см. Ниже).
Специальное имя версии « system
» означает использование того, какой Python находится на PATH
после входа PATH
Shims (другими словами, все, что бы запускалось, если бы Pyenv Shims не были на PATH
). Обратите внимание, что Pyenv рассматривает эти установки вне его управления и не пытается осмотреть или различать их каким -либо образом. Так что, например, если вы находитесь на MacOS и имеете Python OS-сгруппированный Python 3.8.9 и HomeBrew-Underced Python 3.9.12 и 3.10.2-Для Pyenv это все еще единственная версия « system
», и какой-либо из них первым на PATH
под указанным именем, которое вы указали.
Примечание. Вы можете активировать несколько версий одновременно, включая несколько версий Python2 или Python3 одновременно. Это позволяет параллельно использовать Python2 и Python3 и требуется с такими инструментами, как tox
. Например, для того, чтобы поручить Pyenv сначала использовать ваш системный Python и Python3 (например, 2,7,9 и 3.4.2), но также имеют Python 3.3.6, 3.2.1 и 2.5.2, вы сначала pyenv install
. Версии, затем установите pyenv global system 3.3.6 3.2.1 2.5.2
. Затем вы сможете вызвать любую из этих версий с соответствующим именем pythonX
или pythonX.Y
. Вы также можете указать несколько версий в файле .python-version
вручную, разделенной новыми линиями. Линии, начиная с #
игнорируются.
pyenv which <command>
отображает, какой реальный исполняемый файл будет запущен, когда вы вызовыте <command>
через шим. Например, если у вас есть 3.3.6, 3.2.1 и 2.5.2, из которых выбираются 3.3.6 и 2.5.2, а ваш системный Python - 3.2.5, pyenv which python2.5
должен отображать $(pyenv root)/versions/2.5.2/bin/python2.5
, pyenv which python3
$(pyenv root)/versions/3.3.6/bin/python3
и pyenv which python3.2
-путь к вашему системному питону из-за падения (см. ниже).
Shims также проходит к чему -либо дальше по PATH
если соответствующее исполняемое файл не присутствует ни в одной из выбранных установок Python. Это позволяет вам использовать любые программы, установленные в другом месте в системе, если они не затенены выбранной установкой Python.
Как только Pyenv определил, какую версию Python указала ваше приложение, он передает команду вдоль соответствующей установки Python.
Каждая версия Python установлена в свой собственный каталог под $(pyenv root)/versions
.
Например, у вас могут быть установлены эти версии:
$(pyenv root)/versions/2.7.8/
$(pyenv root)/versions/3.4.2/
$(pyenv root)/versions/pypy-2.4.0/
Что касается Pyenv, то имена версий являются просто каталогами под $(pyenv root)/versions
.
Пропустите этот раздел, если вы не должны знать, что делает каждая строка в профиле вашего оболочки.
Также см. Раздел переменных среды для переменных среды, которые контролируют поведение Паенва.
pyenv init
- единственная команда, которая пересекает линию загрузки дополнительных команд в вашу оболочку. Исходя из RVM, некоторые из вас могут быть против этой идеи. Вот что eval "$(pyenv init -)"
на самом деле делает:
Устанавливает путь прокладок. Это то, что позволяет Pyenv перехватывать и перенаправлять вызовы python
, pip
и т. Д. Прозрачно. Это придает $(pyenv root)/shims
к вашему $PATH
. Он также удаляет любые другие экземпляры $(pyenv root)/shims
на PATH
, который позволяет вызывать eval "$(pyenv init -)"
несколько раз без получения PATH
.
Устанавливает автозаполнение. Это совершенно необязательно, но довольно полезно. Поиск $(pyenv root)/completions/pyenv.bash
настроит это. Есть также завершения для ZSH и рыбы.
Перефразирует прокладки. Время от времени вам понадобится восстановить свои файлы Shim. Делая это на init, все убедится, что все обновлено. Вы всегда можете запустить pyenv rehash
вручную.
Устанавливает pyenv
в текущую оболочку в качестве функции оболочки. Этот бит также является необязательным, но позволяет Pyenv и плагинам изменять переменные в вашей текущей оболочке. Это требуется для некоторых команд, таких как pyenv shell
для работы. Диспетчер SH не делает ничего сумасшедшего, например, переопределить cd
или взломать вашу оболочку, но если по какой -то причине вам нужен pyenv
чтобы стать настоящим сценарием, а не функцией оболочки, вы можете безопасно пропустить его.
eval "$(pyenv init --path)"
только пункты 1 и 3.
Чтобы точно увидеть, что происходит под капюшоном для себя, запустите pyenv init -
pyenv init --path
.
eval "$(pyenv init -)"
должен работать при любом интерактивном стартапе оболочки (включая вложенные раковины -например, те, которые вызываются от редакторов), чтобы вы получали функции завершения и удобства оболочки.
eval "$(pyenv init --path)"
может быть использован вместо eval "$(pyenv init -)"
только для включения прокладок без интеграции оболочки. Он также может быть использован для удара прокладок к передней части PATH
после того, как какая -то другая логика подготовила к PATH
, который может тенировать прокладки Паенва.
~/.profile
придают каталоги bin
каталогов для каждого пользователя по PATH
после получения ~/.bashrc
. Это требует добавления вызова pyenv init
к ~/.profile
, а также ~/.bashrc
в этих распределениях, поскольку PIP системы помещает исполнительные файлы для модулей, установленных пользователем, не являющимся корнями в эти каталоги bin
для каждого пользователя. Если вы не хотите использовать pyenv init
и Shims, вы все равно можете извлечь выгоду из способности Pyenv устанавливать для вас версии Python. Просто запустите pyenv install
, и вы найдете версии, установленные в $(pyenv root)/versions
.
Вы можете вручную выполнять или символизировать их по мере необходимости, или вы можете использовать pyenv exec <command>
всякий раз, когда вы хотите, чтобы <command>
был затронут выбором версии Pyenv в соответствии с настройкой в настоящее время.
pyenv exec
работает, считывая $(pyenv root)/versions/<selected version>/bin
to PATH
в среде <command>
, так же, как и то, что делает RVM.
Вы можете повлиять на то, как Pyenv работает со следующими переменными среды:
имя | по умолчанию | описание |
---|---|---|
PYENV_VERSION | Определяет версию Python для использования. Также см. pyenv shell | |
PYENV_ROOT | ~/.pyenv | Определяет каталог, в котором проживают версии и прокладки Python. Также см. pyenv root |
PYENV_DEBUG | Выходы отладки информации. Также как: pyenv --debug <subcommand> | |
PYENV_HOOK_PATH | Смотрите вики | Список путей, разделенный толстой кишкой, искал крючки Pyenv. |
PYENV_DIR | $PWD | Каталог для начала поиска файлов .python-version . |
См. Также переменные специальной среды в Readme для переменных среды Python-Build, которые можно использовать для настройки сборки.
Исходный код Pyenv размещен на GitHub. Он чистый, модульный и простой для понимания, даже если вы не хакер из оболочки.
Тесты выполняются с использованием летучих мышей:
bats test
bats/test/<file>.bats
Не стесняйтесь отправлять запросы на притяжение и ошибки файла на трекер выпуска.
См. Appling.md для получения более подробной информации о отправке изменений.
См. ChangeLog.md.
Лицензия MIT