Pipenv & Entorno Virtuales

https://farm3.staticflickr.com/2943/33485660921_dfc0494739_k_d.jpg

Este tutorial te guiará por la instalación y el uso de paquetes de Python.

Te mostrará como instalar y usar las herramientas necesarias y hacer fuertes recomendaciones en las buenas prácticas. Ten en cuenta que Python es usado para un gran cantidad de propósitos diferentes, y precisamente como manejes tus dependecias puede cambiar basado en como decidas publicar tu sofware. La guía presentada aquí es aplicable directamente al desarrollo y despliegue de servicios en red(incluyendo aplicaciones web), pero también es adecuado para el manejo de entornos de desarrollo y pruebas para cualquier tipo de proyecto.

Nota

Esta guía es escrita para Python 3, sin embargo, estas instrucciones deberían funcionar bien en Python 2.7 - Si lo sigues usando, por alguna razón.

☤ Asegurate de tener Python & pip

Antes de continuar, asegurate de que tienes Python y que esta disponible en tu línea de comandos. Puedes verificar esto ejecutando:

$ python --version

Deberias tener un output como 3.6.2. Si no tienes Python, por favor instala la última versión 3.x desde python.org o mira la sección Installing Python de The Hitchhiker’s Guide to Python.

Nota

Si eres nuevo y obtienes un error como este:

>>> python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'python' is not defined

Es porque este comando tiene la intención de correr en un shell (tambien llamado termial o consola). Mira Python for Beginners tutorial para empezar para una introducción de el shell de tu sistema operativo e interactuar con Python.

Adicionalmente, necesitas asegurarte que tienes pip disponible. Puedes verificar esto ejecutando:

$ pip --version
pip 9.0.1

Si tienes instalado Python desde su fuente, con un instalador de python.org, o via `Homebrew`_ deberías ya tener pip. Si estas en Linux e instalaste a través de tu manejador de paquetes, tal vez necesites instalar pip por separado.

Si tu plan es instalar pipenv usando Hombrew puedes saltarte este paso. El instalador de Homebrew se encarga de pip por ti.

☤ Instalando Pipenv

Pipenv es un manejador de dependencias para los proyectos de Python. Si estas familiarizado con Node.js” npm o Ruby bundler, es similar en espíritu a estas herramientas. Mientras pip puede instalar paquetes de Python, Pipenv es recomendado como herramienta de nivel superior que simplifica el manejo de dependencias para casos comunes.

Use pip to install Pipenv:

$ pip install --user pipenv

Nota

Esto hace una instalación de usuario para prevenir romper cualquier paquete de sistema. Si pipenv no esta disponible en tu shell después de la instalación, vas a necesitar agregar la carpeta raíz de binarios del usuario a tu PATH.

En Linux y macOS puedes buscar la carpeta raíz de binarios del usuario base ejecutando python -m site --user-base y agregando bin al final. Por ejemplo, esto normalmente imprimirá ~/.local (expandiendo con ~ con la ruta absoluta a tu carpeta home) entonces necesitarás agregar ~/.local/bin a tu PATH. Puedes setear tu PATH de manera permanente modificando ~/.profile.

En Windows puedes encontrar la carpeta raíz de binarios ejecutando py -m site --user-site y reemplazando site-packages con Scripts. Por ejemplo, esto retornará C:\Users\Username\AppData\Roaming\Python36\site-packages entonces vas a necesitar setear tu PATH para incluir C:\Users\Username\AppData\Roaming\Python36\Scripts. Puedes setear tu PATH de manera permanente en el Panel de Control. Puedes necesitar cerrar sesión para que los cambios en PATH surtan efecto.

☤ Instalando paquetes para tu proyecto

Pipenv maneja dependencias por proyecto. Para instalar paquetes, cambiate a tu carpeta de proyecto (o solo una carpeta vacía para este tutorial) y ejecuta:

$ cd myproject
$ pipenv install requests

Pipenv instalará la excelente librería Requests y creará un Pipfile para tu carpeta de proyecto. El Pipfile es usado para seguir cual dependencia de tu proyecto necesitas en caso de que quieras reinstalarlas, como cuando comparte el proyecto con otros. Deberías obtener un output parecido a este (aunque la ruta exacta variará):

Creating a Pipfile for this project...
Creating a virtualenv for this project...
Using base prefix '/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6'
New python executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python3.6
Also creating executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: ~/.local/share/virtualenvs/tmp-agwWamBd
Installing requests...
Collecting requests
  Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests)
  Using cached idna-2.6-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Installing collected packages: idna, urllib3, chardet, certifi, requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22

Adding requests to Pipfile's [packages]...
P.S. You have excellent taste! ✨ 🍰 ✨

☤ Usando paquetes instalados

Ahora que Requests esta instalado puedes crear un archivo main.py para usarlo:

import requests

response = requests.get('https://httpbin.org/ip')

print('Your IP is {0}'.format(response.json()['origin']))

Entonces puedes ejecutar este script usando pipenv run:

$ pipenv run python main.py

Deberías tener una salida parecida a esta:

Your IP is 8.8.8.8

Usando $ pipenv run se asegura de que tu paquete instalado esta disponible para tu script. También es posible generar un nuevo shell que se asegura de que todos los comandos tienen acceso a tus paquetes instalados con $ pipenv shell.

☤ Próximos pasos

¡Felicitaciones, ahora sabes cómo instalar y usar paquetes de Python! ✨ 🍰 ✨

☤ Instalación de Pipenv con Homebrew

Homebrew es un manejador de paquetes de sistema popular y open-source para macOS

Instalando Pipenv via Homebrew va a mantener Pipenv y todas sus dependencias en un entorno virtual aislado para que no interfiera con el resto de tus instalaciones de Python.

Una vez tengas instalado Homebrew solo ejecuta:

$ brew install pipenv

Para actualizar pipenv en cualquier momento:

$ brew upgrade pipenv

☤ Instalación pragmática de Pipenv

Si tienes una instalación funcional de pip, mantiene cierto «toolchain» escribe los módulos de Python como utilidades globales en tu entorno de usuario, pip instalación de usuario permite instalaciones en tu carpeta home. Nota que debido a interacciones entre dependencias, deberías limitar las herramientas instaladas de esta manera para un flujo de trabajo con Python como virtualenv, pipenv, tox y software similares.

Para instalar:

$ pip install --user pipenv

Para más información mira la documentación de instalaciones de usuario, pero para agregar herramientas cli desde una instalación de usuario con pip a tu path, agrega el output de:

$ python -c "import site; import os; print(os.path.join(site.USER_BASE, 'bin'))"

Para actualizar pipenv en cualquier momento:

$ pip install --user --upgrade pipenv

☤ Crude Installation of Pipenv

Si ni siquiera tienes instalado pip, puedes usar un método de instalación en bruto, el cual arrancará en todo tu sistema:

$ curl https://raw.githubusercontent.com/kennethreitz/pipenv/master/get-pipenv.py | python

¡Felicidades, ahora tienes pip y Pipenv instalados!