Pyenv le permite cambiar fácilmente entre múltiples versiones de Python. Es simple, discreto y sigue la tradición Unix de las herramientas de un solo propósito que hacen bien una cosa.
Este proyecto fue bifurcado de RBENV y Ruby-Build, y modificado para Python.
PATH
.La opción Homebrew de la sección MacOS a continuación también funcionaría si tiene instalado HomeBrew.
curl https://pyenv.run | bash
Para obtener más detalles, visite nuestro otro proyecto: https://github.com/pyenv/pyenv-installer
Esto lo hará en marcha con la última versión de Pyenv y facilitará el bifurcado y contribuye con cualquier cambio hacia arriba.
$HOME/.pyenv
(pero puede instalarlo en otro lugar): git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
Las opciones de la sección de Linux anterior también funcionan, pero Homebrew se recomienda para el uso básico.
Actualizar homebrew e instalar pyenv:
brew update
brew install pyenv
Si desea instalar (y actualizar) el último jefe de desarrollo de Pyenv en lugar de la última versión, en lugar de ejecutar:
brew install pyenv --head
Luego siga el resto de los pasos posteriores a la instalación, comenzando con la configuración de su entorno de shell para pyenv.
OPCIONAL. Para arreglar los scripts de "configuración" de advertencia de la advertencia del brew doctor
, existen scripts fuera de su sistema o directorios caseros "
Si va a construir fórmulas caseras a partir de la fuente que enlazan contra Python como Tkinter o Numpy (este es solo el caso si es un desarrollador de dicha fórmula, o si tiene una versión EOL de MacOS para la cual son las botellas prebuiladas. ya no se proporciona y está utilizando dicha fórmula).
Para evitar que se vinculen accidentalmente contra una pitón proporcionada por Pyenv, agregue la siguiente línea a la configuración de su caparazón interactivo:
Bash/Zsh:
alias brew= ' env PATH="${PATH//$(pyenv root)/shims:/}" brew '
Pez:
alias brew= " env PATH=(string replace (pyenv root)/shims '' "$ PATH " ) brew "
PyenV no admite oficialmente Windows y no funciona en Windows fuera del subsistema de Windows para Linux. Además, incluso allí, las pitones que instala no son versiones nativas de Windows, sino más bien versiones de Linux que se ejecutan en una máquina virtual, por lo que no obtendrá una funcionalidad específica de Windows.
Si está en Windows, recomendamos usar la bifurcación pyenv-win
de @Kirankotari, que instala versiones nativas de Windows Python.
La siguiente configuración debe funcionar para la gran mayoría de los usuarios para casos de uso comunes. Consulte la configuración avanzada para obtener detalles y más opciones de configuración.
Los archivos de inicio de bash de stock varían ampliamente entre las distribuciones en cuáles de ellos fuente, que, en qué circunstancias, en qué orden y qué configuración adicional realizan. Como tal, la forma más confiable de obtener PyenV en todos los entornos es agregar comandos de configuración de PyenV tanto a .bashrc
(para shells interactivos) como el archivo de perfil que Bash usaría (para shells de inicio de sesión).
Primero, agregue los comandos a ~/.bashrc
ejecutando lo siguiente en su terminal:
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
Entonces, si tiene ~/.profile
, ~/.bash_profile
o ~/.bash_login
, agregue los comandos allí también. Si no tiene ninguno de estos, cree un ~/.profile
y agregue los comandos allí.
~/.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
ADVERTENCIA DE BASH : hay algunos sistemas donde la variable BASH_ENV
está configurada para apuntar a .bashrc
. En tales sistemas, es casi seguro que debe poner la línea eval "$(pyenv init -)"
en .bash_profile
, y no en .bashrc
. De lo contrario, puede observar un comportamiento extraño, como pyenv
meterse en un bucle infinito. Ver #264 para más detalles.
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.zshrc
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.zshrc
echo ' eval "$(pyenv init -)" ' >> ~ /.zshrc
Si desea obtener pyenv en capas de inicio de sesión no interactivas también, agregue los comandos a ~/.zprofile
o ~/.zlogin
.
Si tiene Fish 3.2.0 o más nuevo, ejecute esto interactivamente:
set -Ux PYENV_ROOT $HOME /.pyenv
fish_add_path $PYENV_ROOT /bin
De lo contrario, ejecute el fragmento a continuación:
set -Ux PYENV_ROOT $HOME /.pyenv
set -U fish_user_paths $PYENV_ROOT /bin $fish_user_paths
Ahora, agregue esto a ~/.config/fish/config.fish
:
pyenv init - | source
para que los cambios PATH
surjan efecto.
exec " $SHELL "
Instale dependencias de compilación de Python antes de intentar instalar una nueva versión de Python.
Ahora puede comenzar a usar pyenv.
Si ha actualizado desde Pyenv versión 2.0.x-2.2.x
La lógica de inicio y las instrucciones se han actualizado por simplicidad en 2.3.0. El esquema de configuración anterior y más complicado para 2.0.0-2.2.5 todavía funciona.
PYENV_ROOT
para señalar la ruta donde Pyenv almacenará sus datos. $HOME/.pyenv
es el valor predeterminado. Si instaló Pyenv a través de Git Checkout, le recomendamos establecerlo en la misma ubicación que lo clonó.pyenv
a su PATH
si aún no está allíeval "$(pyenv init -)"
para instalar pyenv
en su carcasa como función de shell, habilitar las cuñas y el autocompletoeval "$(pyenv init --path)"
para habilitar las cuñas, sin integración de shell Para instalar versiones adicionales de Python, use pyenv install
.
Por ejemplo, para descargar e instalar Python 3.10.4, ejecutar:
pyenv install 3.10.4
Ejecutar pyenv install -l
ofrece la lista de todas las versiones disponibles.
Nota: Si tiene problemas para instalar una versión de Python, visite la página Wiki sobre problemas de compilación comunes.
Nota: Si desea usar proxy para descargar, configure las variables de entorno http_proxy
y https_proxy
.
Nota: Si desea un intérprete más rápido a costa de tiempos de construcción más largos, consulte el edificio para obtener el máximo rendimiento en el readme de Python-Build.
Todos los subcomands Pyenv, excepto uninstall
automáticamente, resuelven automáticamente los prefijos completos a la última versión en la línea de versión correspondiente.
pyenv install
elige la última versión conocida, mientras que otros subcomandos eligen la última versión instalada.
Por ejemplo, instalar y luego cambiar a la última versión 3.10:
pyenv install 3.10
pyenv global 3.10
Puede ejecutar pyenv latest -k <prefix>
para ver cómo pyenv install
resolvería un prefijo específico, o pyenv latest <prefix>
para ver cómo otros subcomandos lo resolverían.
Vea la pyenv latest
para más detalles.
Para los siguientes lanzamientos de Python, PyenV aplica parches proporcionados por el usuario que agregan soporte para algunos entornos más nuevos. Aunque no mantenemos activamente esos parches, ya que las versiones existentes nunca cambian, es seguro asumir que continuarán trabajando hasta que haya más cambios incompatibles en una versión posterior de esos entornos.
Para seleccionar una python instalada por Pyenv como la versión para usar, ejecute uno de los siguientes comandos:
pyenv shell <version>
- seleccione solo para la sesión de shell actualpyenv local <version>
: seleccione automáticamente siempre que esté en el directorio actual (o en sus subdirectorios)pyenv global <version>
- Seleccione a nivel mundial para su cuenta de usuarioPor ejemplo, seleccionar la recientemente instalada Python 3.10.4 mencionada anteriormente como su versión preferida para usar:
pyenv global 3.10.4
Ahora, cada vez que invoque python
, pip
, etc., se ejecutará un ejecutable de la instalación 3.10.4 proporcionado por Pyenv en lugar del sistema Python.
Usar " system
" como nombre de versión restablecería la selección a su Python proporcionado por el sistema.
Consulte la comprensión de las cuñas y la comprensión de la selección de la versión de Python para obtener más detalles sobre cómo funciona la selección y más información sobre su uso.
A medida que pasa el tiempo, acumulará versiones de Python en su directorio $(pyenv root)/versions
.
Para eliminar las viejas versiones de Python, use pyenv uninstall <versions>
.
Alternativamente, simplemente puede rm -rf
el directorio de la versión que desea eliminar. Puede encontrar el directorio de una versión particular de Python con el comando pyenv prefix
, por ejemplo, pyenv prefix 2.6.8
. Sin embargo, tenga en cuenta que los complementos pueden ejecutar operaciones adicionales en desinstalación que también debería hacer a mano. Por ejemplo, Pyenv-VirtualEnv también elimina los entornos virtuales vinculados a la versión desinstalada.
Ejecute pyenv commands
para obtener una lista de todos los subcomands disponibles. Ejecute un subcomando con --help
para obtener ayuda en él o vea la referencia de comandos.
Tenga en cuenta que los complementos PyenV que instala pueden agregar sus propios subcomandos.
Si ha instalado pyenv usando HomeBrew, actualice usando:
brew upgrade pyenv
Para cambiar de una versión al último jefe de desarrollo de Pyenv, use:
brew uninstall pyenv
brew install pyenv --head
Luego puede actualizarlo con brew upgrade pyenv
como de costumbre.
Si ha instalado PyenV con Pyenv-Installer, es probable que tenga el complemento Pyenv-Update que actualizaría PyenV y todos los complementos instalados:
pyenv update
Si ha instalado pyenv usando pyenv-installer o git checkout, también puede actualizar su instalación en cualquier momento usando GIT.
Para actualizar a la última versión de desarrollo de Pyenv, use git pull
:
cd $( pyenv root )
git pull
Para actualizar a una versión específica de PyenV, consulte la etiqueta correspondiente:
cd $( pyenv root )
git fetch
git tag
git checkout v0.1.0
La simplicidad de PyenV hace que sea fácil deshabilitarlo temporalmente o desinstalar del sistema.
Para deshabilitar PyenV Administrar sus versiones de Python, simplemente elimine las invocaciones pyenv init
de su configuración de inicio de shell. Esto eliminará el directorio Pyenv Shims de PATH
, y las invocaciones futuras como python
ejecutarán la versión del sistema Python, como lo era antes de Pyenv.
pyenv
aún se puede acceder en la línea de comandos, pero sus aplicaciones de Python no se verán afectadas por el cambio de versión.
Para desinstalar completamente PyenV, elimine todas las líneas de configuración de PyenV de su configuración de inicio de shell y luego elimine su directorio raíz. Esto eliminará todas las versiones de Python que se instalaron en $(pyenv root)/versions/
directorio:
rm -rf $( pyenv root )
Si ha instalado PyenV usando un Administrador de paquetes, como un paso final, realice la eliminación del paquete PyenV. Por ejemplo, para Homebrew:
brew uninstall pyenv
Pyenv proporciona una manera simple de extender y personalizar su funcionalidad con complementos, tan simples como crear un directorio de complementos y dejar caer un script de shell en una cierta subputa con cualquier lógica adicional que necesite ejecutar en ciertos momentos.
La idea principal es que la mayoría de las cosas que puede poner bajo $PYENV_ROOT/<whatever>
también puede poner debajo de $PYENV_ROOT/plugins/your_plugin_name/<whatever>
.
Consulte los complementos en el wiki sobre cómo instalar y usar complementos, así como un catálogo de algunos complementos existentes útiles para necesidades comunes.
Consulte los complementos de autoría en el wiki sobre la redacción de sus propios complementos.
En un alto nivel, Pyenv intercepta los comandos de Python utilizando ejecuciones de cuña inyectados en su PATH
, determina qué versión de Python ha sido especificada por su aplicación y pasa sus comandos a la instalación correcta de Python.
Cuando ejecuta un comando como python
o pip
, su shell (bash / zshrc / ...) busca a través de una lista de directorios para encontrar un archivo ejecutable con ese nombre. Esta lista de directorios vive en una variable ambiental llamada PATH
, con cada directorio en la lista separado por un colon:
/usr/local/bin:/usr/bin:/bin
Los directorios en PATH
se buscan de izquierda a derecha, por lo que un ejecutable coincidente en un directorio al comienzo de la lista tiene prioridad sobre otro al final. En este ejemplo, el directorio /usr/local/bin
se buscará primero, luego /usr/bin
, entonces /bin
.
Pyenv funciona insertando un directorio de cuñas en la parte delantera de su PATH
:
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
A través de un proceso llamado rehacer , Pyenv mantiene cuñas en ese directorio para que coincida con cada comando de Python en cada versión instalada de Python: python
, pip
, etc.
Las cuñas son ejecutables livianos que simplemente pasan su comando a Pyenv. Entonces, con Pyenv instalado, cuando ejecute, digamos, pip
, su sistema operativo hará lo siguiente:
PATH
un archivo ejecutable llamado pip
pip
al comienzo de tu PATH
pip
, que a su vez pasa el comando a PyenvCuando ejecuta una cuña, Pyenv determina qué versión de Python usarla al leerla de las siguientes fuentes, en este orden:
La variable de entorno PYENV_VERSION
(si se especifica). Puede usar el comando pyenv shell
para establecer esta variable de entorno en su sesión de shell actual.
El archivo .python-version
específico de la aplicación en el directorio actual (si está presente). Puede modificar el archivo .python-version
del directorio actual con el comando pyenv local
.
El primer archivo .python-version
encontrado (si lo hay) buscando en cada directorio principal, hasta llegar a la raíz de su sistema de archivos.
El archivo global $(pyenv root)/version
. Puede modificar este archivo utilizando el comando pyenv global
. Si el archivo de versión global no está presente, Pyenv supone que desea usar el "sistema" Python (ver más abajo).
Un nombre de versión especial " system
" significa usar cualquier Python que se encuentre en PATH
después de la entrada de PATH
las cuñas (en otras palabras, lo que se ejecutaría si las cuñas Pyenv no estuvieran en PATH
). Tenga en cuenta que PyenV considera esas instalaciones fuera de su control y no intenta inspeccionarlas o distinguirlas de ninguna manera. Entonces, por ejemplo, si se encuentra en macOS y tiene Python 3.8.9 con Boot OS y Python 3.9.12 y 3.10.2, para pyenv, esta es una sola versión de " system
", y cualquiera de ellos es la primera PATH
debajo del nombre ejecutable que especificó se ejecutará.
Nota: Puede activar múltiples versiones al mismo tiempo, incluidas múltiples versiones de Python2 o Python3 simultáneamente. Esto permite el uso paralelo de Python2 y Python3, y se requiere con herramientas como tox
. Por ejemplo, para instruir a PyenV que use primero su sistema Python y Python3 (que son por ejemplo, 2.7.9 y 3.4.2) pero también tienen Python 3.3.6, 3.2.1 y 2.5.2 disponibles, primero pyenv install
que falta Versiones, luego establezca pyenv global system 3.3.6 3.2.1 2.5.2
. Entonces podrás invocar cualquiera de esas versiones con un nombre apropiado pythonX
o pythonX.Y
. También puede especificar múltiples versiones en un archivo .python-version
a mano, separado por NewLines. Se ignoran las líneas que comienzan con un #
.
pyenv which <command>
muestra qué ejecutable real se ejecutaría cuando invoque <command>
a través de una cuña. Por ejemplo, si tiene 3.3.6, 3.2.1 y 2.5.2 instalados de los cuales 3.3.6 y 2.5.2 están seleccionados y su sistema Python es 3.2.5, pyenv which python2.5
debe mostrar $(pyenv root)/versions/2.5.2/bin/python2.5
, pyenv which python3
$(pyenv root)/versions/3.3.6/bin/python3
y pyenv which python3.2
-camino a su sistema Python debido a la caída de las caídas (vea abajo).
Las cuñas también caen a cualquier cosa más en PATH
si el ejecutable correspondiente no está presente en ninguna de las instalaciones de Python seleccionadas. Esto le permite usar cualquier programa instalado en otros lugares del sistema siempre que no se sombreen por una instalación de Python seleccionada.
Una vez que PyenV ha determinado qué versión de Python ha especificado su aplicación, pasa el comando a la instalación de Python correspondiente.
Cada versión de Python se instala en su propio directorio bajo $(pyenv root)/versions
.
Por ejemplo, es posible que tenga estas versiones instaladas:
$(pyenv root)/versions/2.7.8/
$(pyenv root)/versions/3.4.2/
$(pyenv root)/versions/pypy-2.4.0/
En lo que respecta a Pyenv, los nombres de versiones son simplemente directorios de $(pyenv root)/versions
.
Omita esta sección a menos que deba saber qué está haciendo cada línea en su perfil de shell.
Consulte también la sección Variables de entorno para las variables de entorno que controlan el comportamiento de PyenV.
pyenv init
es el único comando que cruza la línea de carga de comandos adicionales en su shell. Viniendo de RVM, algunos de ustedes podrían oponerse a esta idea. Esto es lo que eval "$(pyenv init -)"
realmente hace:
Establece el camino de las cuñas. Esto es lo que permite a PyenV interceptar y redirigir las invocaciones de python
, pip
, etc. Prepara $(pyenv root)/shims
a su $PATH
. También elimina cualquier otra instancia de $(pyenv root)/shims
en PATH
que permite invocar eval "$(pyenv init -)"
varias veces sin obtener entradas PATH
duplicadas.
Instala Autocompleto. Esto es completamente opcional pero bastante útil. Abastecimiento $(pyenv root)/completions/pyenv.bash
lo establecerá. También hay finalizaciones para Zsh y Fish.
Rehashes cuñas. De vez en cuando deberá reconstruir sus archivos de cuña. Hacer esto en init se asegura de que todo esté actualizado. Siempre puedes ejecutar pyenv rehash
manualmente.
Instala pyenv
en el shell actual como una función de shell. Este bit también es opcional, pero permite que Pyenv y los complementos cambien las variables en su carcasa actual. Esto es necesario para que funcionen algunos comandos como pyenv shell
. El despachador de SH no hace nada loco como anular cd
o hackear su mensaje de shell, pero si por alguna razón necesita que pyenv
sea un script real en lugar de una función de shell, puede omitirlo de manera segura.
eval "$(pyenv init --path)"
solo hace los elementos 1 y 3.
Para ver exactamente lo que sucede debajo del capó para usted, ejecute pyenv init -
o pyenv init --path
.
Se supone que eval "$(pyenv init -)"
se ejecuta en cualquier startup interactiva de Shell (incluidas las conchas anidadas, por ejemplo, aquellos invocados de los editores) para que realice funciones de shell de finalización y conveniencia.
eval "$(pyenv init --path)"
se puede usar en lugar de eval "$(pyenv init -)"
para habilitar las cuñas, sin integración de shell. También se puede usar para golpear las cuñas al frente de PATH
después de que alguna otra lógica ha preparado cosas en PATH
que puede seguir las cuñas de Pyenv.
~/.profile
prepende los directorios bin
por usuario a PATH
después de haber obtenido ~/.bashrc
. Esto requiere agregar una llamada pyenv init
a ~/.profile
, así como ~/.bashrc
en estas distribuciones porque el PIP del sistema coloca ejecutables para módulos instalados por un usuario no raíz en esos directorios bin
por usuario. Si no desea utilizar pyenv init
and Shims, aún puede beneficiarse de la capacidad de Pyenv para instalar versiones de Python para usted. Simplemente ejecute pyenv install
y encontrará versiones instaladas en $(pyenv root)/versions
.
Puede ejecutarlos manualmente o enlaces a simularlos según sea necesario, o puede usar pyenv exec <command>
siempre que desee <command>
se vea afectado por la selección de la versión de Pyenv como se configura actualmente.
pyenv exec
funciona prependiendo $(pyenv root)/versions/<selected version>/bin
a PATH
en el entorno de <command>
, lo mismo que hace RVM.
Puede afectar cómo funciona PyenV con las siguientes variables de entorno:
nombre | por defecto | descripción |
---|---|---|
PYENV_VERSION | Especifica la versión de Python que se utilizará. Ver también pyenv shell | |
PYENV_ROOT | ~/.pyenv | Define el directorio bajo el cual residen las versiones y cuñas de Python. Ver también pyenv root |
PYENV_DEBUG | Salida Información de depuración. También como: pyenv --debug <subcommand> | |
PYENV_HOOK_PATH | ver wiki | Lista de rutas separadas por colon buscó ganchos de pyenv. |
PYENV_DIR | $PWD | Directorio para comenzar a buscar archivos .python-version . |
Consulte también Variables de entorno especiales en las variables de entorno de Python-Build que se pueden utilizar para personalizar la compilación.
El código fuente de Pyenv está alojado en GitHub. Es limpio, modular y fácil de entender, incluso si no eres un pirata informático.
Las pruebas se ejecutan con murciélagos:
bats test
bats/test/<file>.bats
No dude en enviar solicitudes de extracción y errores de archivo en el rastreador de problemas.
Consulte Contriping.MD para obtener más detalles sobre cómo enviar cambios.
Ver ChangeLog.md.
La licencia del MIT