Adición de enero de 2019: si regresa a este blog después de actualizar a macOS Mojave, consulte este problema de github para obtener una solución al problema común de pyenv 'zlib no disponible'.
Antes de comenzar, repasemos brevemente los términos utilizados en el título:
- Varias versiones de Python : diferentes instalaciones de Python en la misma máquina, 2.7 y 3.4 por ejemplo.
- Entornos virtuales : entornos independientes aislados que pueden tener tanto una versión específica de Python como de cualquier paquete específico del proyecto instalado dentro de ellos, sin afectar a ningún otro proyecto.
Aquí veremos tres herramientas diferentes para trabajar con ellos y cuándo podría necesitar cada una. Exploremos los casos de uso para:
venv
/pyvenv
pyenv
pyenv-virtualenv
Si está utilizando una única versión de Python, digamos versión 3.3+ , y desea administrar diferentes entornos virtuales, entonces venv
es todo lo que necesita.
Si desea utilizar varias versiones de Python en 3.3+ , con o sin entornos virtuales , continúe leyendo sobre pyenv
.
Si también desea trabajar con Python 2 , entonces pyenv-virtualenv
es una herramienta a considerar.
venv
Desde Python 3.3+ venv
se incluye el paquete. Es ideal para crear entornos virtuales ligeros.
Hasta Python 3.6 pyvenv
también se incluía un script llamado como envoltorio venv
, pero ha quedado obsoleto. Se eliminará por completo en Python 3.8. Exactamente la misma funcionalidad está disponible cuando se usa venv
, y cualquier documentación existente debe actualizarse. Para cualquier persona interesada, puede leer las razones detrás de la depreciación pyvenv
.
venv
se utiliza para crear un nuevo entorno a través del comando de terminal:
$ python3 -m venv directory-name-to-create
activado con:
$ source name-given/bin/activate
y desactivado con simplemente:
$ deactivate
Si necesita eliminar el entorno por completo después de desactivarlo, puede ejecutar:
$ rm -r name-given
De forma predeterminada, el entorno que crea será la versión actual de Python que está utilizando. Si está escribiendo documentación y desea la seguridad adicional de que su lector está utilizando la versión correcta de Python, puede especificar el número de versión mayor y menor en el comando, así:
$ python3.6 -m venv example-three-six
Si el lector está usando una versión diferente a la 3.6, entonces el comando no será exitoso y lo indicará en su mensaje de error. Sin embargo, cualquier versión de parche (por ejemplo 3.6.4) funcionará.
Cuando el entorno está activo, se pueden instalar todos los paquetes a través de la pip
forma habitual. De forma predeterminada, el entorno recién creado no incluirá ningún paquete ya instalado en la máquina. Como pip
sí mismo no se instalará necesariamente en la máquina. Se recomienda actualizar primero pip
a la última versión, utilizando pip install --upgrade pip
.
Los proyectos suelen tener un requirements.txt
archivo que especifica sus dependencias. Esto permite que el comando de pip install -r requirements.txt
comando de acceso directo instale rápidamente todos los paquetes en el entorno virtual recién creado. Solo existirán en el entorno virtual. No estará disponible cuando se desactive, pero persistirá cuando se reactive.
Si no necesita utilizar versiones adicionales de Python, entonces esto es todo lo que necesita para crear entornos virtuales aislados y específicos del proyecto.
pyenv
Si desea utilizar varias versiones de Python en una sola máquina, entonces pyenv
es una herramienta de uso común para instalar y cambiar entre versiones. Esto no debe confundirse con el pyvenv
script depreciado mencionado anteriormente . No viene incluido con Python y debe instalarse por separado.
La pyenv
documentación incluye una gran descripción de cómo funciona, por lo que aquí veremos simplemente cómo usarlo.
Primero tendremos que instalarlo. Si usamos Mac OS X, podemos hacer esto usando Homebrew, de lo contrario, considere otras opciones de instalación.
$ brew update $ brew install pyenv
A continuación, agregue lo siguiente hacia la parte inferior de sus scripts de shell para permitirle pyenv
cambiar automáticamente las versiones:
eval "$(pyenv init -)"
Para ello, abra su uso en shell script, a través de $ ~/.zshrc
, $ ~/.bashrc
o $ ~/.bash_profile
y copiar y pegar la línea anterior en.
La ejecución pyenv versions
mostrará qué versiones de Python están instaladas actualmente, *
junto a la que está actualmente en uso. pyenv version
muestra esto directamente y python --version
se puede utilizar para verificarlo.
Para instalar una versión adicional, digamos 3.4.0
, simplemente use pyenv install 3.4.0
.
pyenv
busca en cuatro lugares para decidir qué versión de Python usar, en orden de prioridad:
- La
PYENV_VERSION
variable de entorno (si se especifica). Puede usar elpyenv shell
comando para establecer esta variable de entorno en su sesión de shell actual. - El
.python-version
archivo específico de la aplicación en el directorio actual (si está presente). Puede modificar el.python-version
archivo del directorio actual con elpyenv local
comando. - El primer
.python-version
archivo encontrado (si lo hay) buscando en cada directorio principal, hasta llegar a la raíz de su sistema de archivos. - El archivo de versión global. Puede modificar este archivo usando el
pyenv global
comando. Si el archivo de versión global no está presente, pyenv asume que desea utilizar el "sistema" de Python. (En otras palabras, cualquier versión se ejecutaría si pyenv no estuviera en suPATH
.)
Al configurar un nuevo proyecto que utilizará Python 3.6.4 pyenv local 3.6.4
, se ejecutará en su directorio raíz. Esto establecería la versión y crearía un .python-version
archivo, para que las máquinas de otros colaboradores lo recogieran.
La descripción completa de los pyenv
comandos es una para marcar.
pyenv y venv
Al trabajar con Python 3.3+, ahora sabemos cómo instalar y cambiar entre diferentes versiones de Python, y cómo crear nuevos entornos virtuales.
Como ejemplo, digamos que estábamos configurando un proyecto que iba a usar Python 3.4.
Primero podríamos configurar nuestra versión local usando pyenv local 3.4.0
.
Si luego ejecutamos python3 -m venv example-project
un nuevo entorno virtual, se configuraría example-project
con nuestro Python 3.4.0 habilitado localmente.
Activamos usando source example-project/bin/activate
y podemos empezar a trabajar.
A continuación, podríamos, opcionalmente, documentar que un colaborador debería utilizar python3.4 -m venv
. Esto significa que incluso si un colaborador no estuviera usando pyenv, el python3.4
comando produciría un error si su versión de Python no fuera la misma versión mayor y menor (3 y 4), como pretendíamos.
Alternativamente, podríamos optar por especificar simplemente que se usaría 3.4.0 e instruir python3 -m venv
. Si creemos que cualquier versión mayor que 3.4 es aceptable, entonces también podemos optar por usar python3
over python3.4
, como si el colaborador estuviera usando 3.6, de lo contrario, también recibiría un error. Esta es una decisión específica del proyecto.
pyenv-virtualenv
pyenv
se puede utilizar para instalar Python 2 y 3 versiones. Sin embargo, como hemos visto, venv
está limitado a versiones de Python superiores a 3.3.
pyenv-virtualenv
es una herramienta para crear entornos virtuales integrados pyenv
y funciona para todas las versiones de Python. Todavía se recomienda utilizar Python oficial venv
siempre que sea posible. Pero si, por ejemplo, está creando un entorno virtual basado en 2.7.13
, entonces esto es un complemento pyenv
.
También funciona bien con conda
entornos Anaconda y Miniconda si ya los está utilizando. virtualenv
También existe una herramienta llamada . No está cubierto aquí, pero está vinculado al final.
Después de instalarlo, pyenv
se puede instalar usando Homebrew (o alternativas) de la siguiente manera:
$ brew install pyenv-virtualenv
A continuación, en su .zshrc
, .bashrc
o .bash_profile
(según el shell que utilice) agregue lo siguiente hacia la parte inferior:
eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
Esto permite pyenv
activar y desactivar entornos automáticamente al mover directorios.
Para crear un nuevo entorno virtual, use:
$ pyenv virtualenv // for example $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
Los entornos existentes se pueden enumerar con:
$ pyenv virtualenvs
Activado / desactivado con:
$ pyenv activate $ pyenv deactivate
En el momento de escribir este artículo, cuando se utilice , se mostrará activate
la advertencia prompt changing will be removed from future release
. Esto es lo esperado y se refiere solo a la (env-name)
visualización en su shell, no al uso del activate
comando en sí.
Los requisitos de instalación funcionan como se describe en venv
. A diferencia de venv
un rm -r
comando, no es necesario eliminar un entorno, uninstall
existe un comando.
Pensamientos finales
Entre estas tres herramientas, tenemos la capacidad de colaborar en cualquier proyecto, sin importar la versión de Python o de las dependencias requeridas. También sabemos cómo documentar las instrucciones de configuración para que otros las utilicen en cualquier proyecto en el que trabajemos.
También podemos ver el razonamiento detrás de qué conjunto usar, ya que no todos los desarrolladores requerirán los tres.
Con suerte, esto fue útil y es una referencia útil en combinación con la documentación vinculada a continuación.
¡Gracias por leer! ?
Otras cosas que he explorado:
- Simulacros de módulos ES y CommonJS con jest.mock ()
- Una guía para principiantes del Elastic Container Service de Amazon
Recursos
- Entornos virtuales de Python: una introducción
- Depreciando
pyvenv
venv
Documentación de Pythonvenv
vsvirtualenv
- ¿Cuál es la diferencia entre venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc?
- ¿Necesito instalar
pip
?