En posts anteriores hemos visto el uso e instalación de herramientas como virtualenvwrapper, pyenv y pipenv, hemos visto las ventajas de usar estas herramientas en nuestro entorno de desarrollo, y quiero compartir el flujo de trabajo que personalmente uso, combinando algunas de estas herramientas.
Escenario
Todo este flujo de trabajo lo realizare en un entorno de trabajo bajo docker, con base de una imagen de Debian 9 Stretch, obviaré la instalación y creación del contenedor, esto lo podemos ver en otro post.
Paso 1 - Instalar Pyenv
Lo primero que haré será instalar Pyenv, esto para utilizar una versión de python más reciente que la default de nuestro SO y para evitar posibles problemas si se actualizara la versión de python de nuestro SO
Pero a diferencia de como lo hicimos en el post de Pyenv, usando el script instalador, usaré el método de git de instalación de pyenv:
Nota: como lo podemos leer en la wiki de pyenv pyenv-github para la instalación de python con pyenv necesitamos algunos paquetes previamente instalados:
Debian/Mint/Ubuntu
sudo apt-get update; sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Clonamos el proyecto de pyenv en nuestro directorio $HOME/.pyenv
Y añadimos las siguientes líneas a nuestro archivo .bashrc si usamos bash o .zshrc si usamos Zshell
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init --path)"\nfi' >> ~/.bashrc
Recargamos nuestro interprete:
exec "$SHELL"
E instalamos nuestra versión de python a utilizar:
pyenv install 2.7.15
Si ocurriera algún error durante la instalación, recomiendo revisar la wiki de pyenv para consultar los errores mas comunes
Una vez instalado definimos globalmente la versión de python que instalamos:
pyenv global 2.7.15
Revisamos que nuestra versión es la que instalamos previamente, y estamos listos para continuar.
Paso 2 - Instalar Pipenv
Una vez definida nuestra versión de python, usaremos pipenv como vimos en post anterior, pipenv además de manejar nuestros entornos virtuales, nos permite administrar de una mejor forma nuestras dependencias de proyectos, reemplazando el uso de pip install y el archivo requeriments.txt
Instalamos pipenv:
pip install --user pipenv
Si nos muestra una advertencia como la siguiente:
The script virtualenv-clone is installed in '/home/developer/.local/bin' which is not on PATH.
agregaremos a nuestro PATH la ruta que muestra el mensaje:
echo -e 'export PATH="$PATH:/home/developer/.local/bin"' >> ~/.bashrc
y recargamos nuestro interprete:
exec "$SHELL"
Paso 3 - Creando un entorno virtual y manejando sus dependencias
Una vez instalado pyenv y pipenv, podemos comenzar a crear nuestros entornos virtuales, o bien podemos migrar algun proyecto en el que previamente usabamos pip y el archivo requeriments.txt al uso de Pipfile y Pipfile.lock
Primer caso - Creando un entorno virtual nuevo para un proyecto nuevo
Creamos un directorio donde iniciaremos nuestro proyecto:
mkdir helloflask
cd helloflask
pipenv install --python 2.7.15
Iniciamos nuestro entorno virtual:
pipenv shell
vemos como se antepone a nuestro prompt el nombre del entorno virtual conformado por el nombre del directorio de nuestro proyecto seguido de un identificador único, ademas de crearse los archivos Pipfile y Pipfile.lock que es el reemplazo mejorado del archivo requeriments.txt
y para este ejemplo instalamos flask:
pipenv install flask
y si vemos el contenido de nuestro archivo Pipfile y Pipfile.lock vemos que se actualizó con flask y sus dependencias, también podemos utilizar el comando pipenv graph para ver nuestros paquete y dependencias instalados en nuestro entorno virtual:
Segundo caso - Creando un entorno virtual nuevo para un proyecto existente
En este caso tomaremos como ejemplo un proyecto previamente creado y que tiene un archivo requeriments.txt y que migraremos al uso de Pipfile.
cd ~/flaskapi
pipenv install --python 2.7.15 -r requeriments.txt
En este caso el archivo requeriments.txt contiene flask y BeatifulSoup4
pipenv tomará este archivo requeriments.txt e instalará su contenido y actualizará los archivos Pipfile y creará el entorno virtual, si analizamos el uso de los archivos Pipfile evitamos el tener que hacer el uso de pip freeze y de tener que especificar que librerías tomar en cuenta.
Y hasta aquí llega el flujo de trabajo normal que tengo al usar python y estas herramientas, vemos que hay un sin fin de opciones y herramientas para el manejo de entornos virtuales, versiones de python, etc. Pero con estas dos herramientas podemos abarcar todo en uno, simplificando el flujo de trabajo.