Bienvenido, soy Luis y en esta ocasión les traigo este nuevo artículo.
En esta publicación, tocaré los conceptos básicos de Python instalación de paquetes y entornos virtuales. También compararé dos herramientas populares que se utilizan para administrar entornos virtuales.
Cuando comencé a trabajar con Python, me tomó un tiempo entenderlos. A través de esta publicación, pretendo ayudar a los nuevos desarrolladores de Python a comprender estos conceptos y evitar errores comunes.
A tener en cuenta: Todos los ejemplos de líneas de comando en esta publicación son específicos de MacOS. Para Linux y WSL sistemas, la sintaxis varía según la distribución y el shell que haya instalado.
Índice
Instalador de paquetes de Python (PIP)
Entendiendo como PIP funciona es un requisito previo importante para comprender la necesidad de los entornos virtuales. PIP es el administrador de paquetes de Python. Le permite instalar, actualizar y desinstalar paquetes de Python.
El comando pip install docker
instala la última versión del docker
módulo, junto con todas sus dependencias.
Una forma común de instalar varios paquetes es especificarlos en un requirements.txt
archivo. Entonces usa pip install -r requirements.txt
para instalar los paquetes. Aquí hay un ejemplo de archivo requirements.txt:
pyyaml>=5.1 cryptography aioconsole==0.1.14 termcolor==1.1.0
Desafíos con PIP
Conflictos de dependencia
El uso de los comandos anteriores instala / actualiza paquetes para el intérprete de Python en todo el sistema. Las versiones de Python, PIP y los paquetes de Python que se envían con su sistema operativo pueden ser necesarias para que funcione el software heredado. No es recomendable cambiarlos / actualizarlos, ya que puede romper la compatibilidad con el software heredado. Consulte la sección «Desaprovechamientos» aquí para referencia.
Además, si tiene varios proyectos que tienen dependencias en conflicto (utilizando diferentes versiones del mismo paquete), o un sistema multiusuario en el que es probable que cada usuario esté creando diferentes proyectos (como un servidor de compilación de CI / CD), haga un paquete de todo el sistema la instalación no es realmente una opción.
Construcciones no deterministas
La versión actual (20.1.1) de PIP no garantizar el orden de instalación al instalar varios paquetes. Además, si dos paquetes dependen de diferentes versiones del mismo paquete (transitivo), qué versión del paquete transitivo se instala depende del orden en que se instalen los paquetes. Por tanto, dos personas utilizan el mismo requirements.txt
El archivo aún puede terminar con la instalación de diferentes versiones de paquetes.
Entornos virtuales
Los entornos virtuales se utilizan para aislar el intérprete de Python y los paquetes para cada proyecto. Cada entorno aislado está protegido de los conflictos de dependencia que podrían surgir en un entorno compartido. Por esta razón, se recomienda encarecidamente utilizar entornos virtuales mientras se trabaja en proyectos de Python.
Ciclo de vida de un entorno virtual
Creando un entorno virtual instala un nuevo intérprete de Python en su directorio. Una vez creado, debe ser activado. Esto actualiza las variables de entorno para que apunten al intérprete de Python y al PIP dentro del entorno virtual. Todas las instalaciones / actualizaciones de paquetes a partir de entonces ocurren localmente dentro del entorno virtual. Una vez que haya terminado de instalar los paquetes y probar / construir / empaquetar su proyecto, simplemente desactivar el entorno virtual. Esto revierte los cambios realizados en las variables de entorno cuando se activó el entorno. La práctica común es tener un entorno virtual diferente para cada uno de sus proyectos de Python.
Herramientas para gestionar entornos virtuales
Virtualenv
Virtualenv es una de las herramientas más antiguas y populares. Se utiliza junto con PIP.
Instalación
# Check installed version for default interpreter virtualenv --version# Check installed version for specific interpreter python3 -m virtualenv --version# Install for the default Python interpreter sudo python -m pip install virtualenv# In case you have multiple Python versions on your system and want to install for a specific one sudo python3 -m pip install virtualenv
Creando un entorno virtual
La práctica recomendada es mantener todos los entornos virtuales en un directorio común o por separado dentro de cada proyecto. En cualquier caso, su contenido debe no ser agregado a Git (o cualquier otro VCS).
cd ~ mkdir virtualenvs cd virtualenvs# Create virtual env containing the same interpreter as the default virtualenv myvenv # or python -m virtualenv myvenv# Create a virtual environment using python3 virtualenv -p python3 myvenv # or python3 -m virtualenv myvenv
Activar, usar y desactivar un entorno virtual
# Navigate to your project's directory # Activate the environment . ~/virtualenvs/myvenv/bin/activate# List packages installed in the virtual environment pip list# Install a package: pip refers to the pip installed in the virtual environment. All packages will get installed within the 'lib' directory within the virtual environment pip install package_name# Deactivating the active environment deactivate
Virtualenv elimina el problema del conflicto de dependencia. Pero, dado que PIP se usa para instalar dependencias, todavía sufre el problema de las compilaciones no deterministas.
Pipenv
Pipenv es relativamente nuevo y más poderoso. Combina las capacidades de PIP y Virtualenv y las mejora al permitir construcciones deterministas.
Usa Pipfile para registrar dependencias. Además, utiliza Pipfile.lock, que almacena los hashes de todos los paquetes instalados en el entorno. Esto es lo que permite a Pipenv hacer compilaciones repetibles y deterministas. Ambos archivos deben agregarse a VCS.
Instalación
# Using Homebrew brew install pipenv# Using pip sudo pip install pipenv
Creando un entorno virtual
# Navigate to your project's directory # Use command line to specify Python 3 or 2 when creating virtualenv pipenv --three/--two
Instalación de dependencias
# Navigate to your project's directory # Install a package and add it to Pipfile pipenv install package_name# Install all packages from Pipfile pipenv install# In both the above commands, it first creates a virtual environment for the current project before installing the packages in it.# Generate pipfile.lock pipenv lock
Activar y desactivar un entorno virtual
# Activate pipenv shell# Deactivate exit
Conclusión
Virtualenv y Pipenv son las herramientas más populares en este momento para administrar entornos virtuales. Sin embargo, el ecosistema de Python siempre está evolucionando y existen herramientas que ofrecen más funcionalidad. Uno de esos nuevos proyectos es Poesía. Animo a los lectores a explorarlo.
Feliz programación.
Añadir comentario