Curso

Para cualquier desarrollador, tener bien configurado su equipo facilita muchísimo el trabajo. Esto incluye instalar y configurar las mejores herramientas y preparar todo lo necesario para dar lo mejor de sí al crear software. Quienes trabajan con datos no son una excepción: una buena configuración es clave para crear desde herramientas de visualización hasta procesos de ingestión. En este tutorial veremos los fundamentos para preparar un ordenador para Data Science, aunque también te servirá si quieres desarrollar software con el lenguaje Python. ¡Vamos a ello!
Alcance
Python está disponible para una gran variedad de sistemas operativos. En este tutorial verás ejemplos ejecutados en Linux Ubuntu, pero se aplican en general a otros sistemas basados en UNIX y a macOS. Para MS Windows hay pequeñas diferencias que señalaremos cuando corresponda.
Python: la pieza central
tl;dr Usa la implementación de Python 3 del sitio oficial
Pensar en el intérprete de Python como la pieza central del desarrollo con este lenguaje es casi obvio. Pero aquí suele surgir la duda de cuál intérprete usar. Además, seguramente habrás oído hablar de dos versiones del lenguaje; por eso, elegir la versión e implementación correctas es la primera decisión importante.
Python, Anaconda, Jython, WinPython, IronPython... demasiadas serpientes para una sola jaula
Debido a su popularidad, existen muchas implementaciones del intérprete. Algunas se pueden instalar fácilmente en tu equipo; otras están en fases tempranas y su instalación solo se recomienda a sus desarrolladores o a programadores valientes. La wiki oficial de Python recoge varias de ellas y sus características frente a otras. Como verás a lo largo del tutorial, la distribución de Python disponible en la web oficial incluye todo lo necesario para empezar a programar sin echar en falta funciones de otras implementaciones.
¿Python 2 o Python 3? ¿Qué versión deberías usar?
Aunque Python 3 se lanzó hace ya más de diez años, la transición desde Python 2 no fue precisamente un camino de rosas. Una de las razones principales fue que los cambios de sintaxis hicieron que muchas librerías existentes no estuvieran disponibles en la versión más nueva. Y ya verás que la enorme disponibilidad de librerías para todo tipo de propósitos es una de las grandes fortalezas del lenguaje. Durante ese periodo surgieron herramientas como 2to3 o six para acortar el camino y facilitar la migración. A fecha de redacción de este tutorial, la gran mayoría de librerías ya está disponible para Python 3, así que la decisión es sencilla: Python 3. Además, en 2020 el ciclo de vida de Python 2 llegó a su fin. Incluso hubo quien organizó una fiesta de despedida en PyCon 2020. ¡No dudes en brindar por todo lo que Python 2 nos dio!
Instalar Python en tu ordenador
El intérprete de Python está disponible para la mayoría de sistemas operativos, e incluso hay paquetes que facilitan su instalación. En Ubuntu, Python 2 y Python 3 venían incluidos por defecto en los entornos de escritorio. Ten en cuenta que el alias python sigue apuntando a la versión 2 en algunos sistemas en lugar de a la 3, por lo que quizá te interese definir un alias en tu archivo ~/.bashrc. Como hemos comentado, lo esperable es que en adelante solo haya una versión instalada. Mi recomendación es instalar la versión más reciente de Python. Si ya tienes Python 3, comprueba que sea superior a la 3.5. Si es más antigua, actualízala para disfrutar de las últimas mejoras del lenguaje.
$ python --version
Python 3.5.2
En Windows, instalar Python también es muy sencillo. En la página oficial de descargas encontrarás un instalador que te guía en unos pocos clics.
Gestionar dependencias de proyecto con pip

Para un desarrollo básico, basta con tener el intérprete de Python para empezar a programar. La distribución viene con el intérprete y con herramientas que facilitan la gestión de aplicaciones. Una de ellas es pip, cuyo objetivo es ayudarte a instalar librerías de terceros publicadas en PyPI (Python Package Index) u otros repositorios públicos o privados.
Nuestro primer proyecto en Python: Jupyter Notebooks
Pensemos en un primer proyecto de Data Science: un cuaderno de Jupyter para limpiar datos y crear visualizaciones potentes. La primera librería que necesitamos es Jupyter. Instalar Jupyter en tu equipo es tan simple como esto:
$ pip install --user jupyter
La opción --user instala la librería solo para el usuario que ejecuta el comando. Si la quitas, harás una instalación para todo el sistema, pero puede requerir privilegios de administrador. Además de instalar, pip permite descargar librerías, consultar la configuración actual, actualizarlas o desinstalarlas cuando ya no las necesites. La siguiente tabla resume algunos comandos útiles para gestionar lo que tu aplicación necesita:
| Comando | Descripción |
|---|---|
pip install <package> |
Instala un paquete |
pip install --user <package> |
Instala un paquete solo para el usuario actual |
pip install --upgrade <package> |
Actualiza un paquete |
pip uninstall <package> |
Desinstala un paquete |
pip download <package> |
Descarga un paquete |
pip freeze |
Lista los paquetes instalados |
pip install -r requirements.txt |
Instala los paquetes listados en el archivo requirements.txt |
pip show <package> |
Muestra información del paquete |
Volveremos a usar estos comandos para gestionar dependencias. Por ahora, quédate con la idea de que pip es el gestor de dependencias de tu aplicación. Y algo importante: pip instala no solo las librerías que pides, sino también sus dependencias, así que te ahorras procedimientos de instalación complejos. ¡pip install es el camino!
Entornos virtuales: aísla la configuración de tu proyecto

Imagina que, mientras trabajas en tu proyecto con notebooks, descubres una librería nueva y brillante con funciones que quieres probar antes de incluirla en la configuración. Esa librería requiere otra versión de Jupyter. En este punto tienes dos opciones:
- Instalar el paquete nuevo sin sus dependencias. Probablemente fallará salvo que cambies su código.
- Instalar el paquete nuevo con dependencias. Afectará a tu proyecto actual, te obligará a actualizar la configuración y quizá a hacer cambios para que todo funcione.
Estos escenarios se agravan si trabajas en dos o más proyectos a la vez, o si tienes un conjunto de aplicaciones en Python que dependen de una librería que no quieres tocar. Puede ser un dolor de cabeza. Por suerte, Python ofrece un mecanismo para aislar la configuración de cada proyecto del resto: los entornos virtuales. Aunque ya existían en Python 2 junto con otros enfoques, desde la versión 3.6 son parte del lenguaje (¡te animamos a usar esta versión o una más reciente!). En intérpretes anteriores a 3.6, puedes instalar la librería con pip así:
$ pip install -U venv
Si usas Python 2 (salvo que prefieras actualizar), la librería se llama virtualenv y se instala igual:
$ pip install -U virtualenv
En Ubuntu también puedes encontrar virtualenv como paquete del sistema e instalarlo con apt-get:
$ sudo apt-get install python3-venv
Crear un entorno virtual es muy sencillo. En la línea de comandos, ejecuta lo siguiente para crear un entorno nuevo en el directorio new_venv.
$ python -m venv new_venv
Como recomendación, lanza este comando desde tu carpeta de trabajo. Así tendrás un directorio autocontenido con tu código fuente y el entorno virtual donde se guardarán las librerías que necesite tu aplicación. Una vez creado el entorno, puedes empezar a trabajar en modo aislado cargando el script activate dentro de new_venv/bin/activate.
source new_venv/bin/activate
(new_venv) $ ...
En Windows, ejecuta el script activate dentro de la carpeta Scripts.
new_venv/Scripts/activate
(new_venv) $ ...
Al activar el entorno verás que el prompt de la consola cambia y muestra el nombre del entorno entre paréntesis. A grandes rasgos, un entorno virtual contiene:
- Un intérprete de Python: el mismo con el que se creó el entorno. Si no cambias el alias de python, tendrás que usar explícitamente python3 o incluso python3.6 si tienes varias versiones de Python 3 instaladas.
- El gestor de paquetes pip. Instalará las librerías dentro de lib/pythonX.Y/site/packages. El intérprete buscará ahí las dependencias.
- Scripts de activación/desactivación. Sirven para cargar el entorno del proyecto y volver a la configuración por defecto cuando termines. Con el entorno activo, instala cualquier librería así:
$ pip install requests
Este comando instalará la librería requests dentro del entorno virtual, y el intérprete guardado en la carpeta bin del entorno podrá cargarla. Observa que no has necesitado permisos de administrador para instalarla. Puedes comprobar la instalación con pip show (pip show requests), que da detalles del paquete. Cuando termines en un proyecto, desactiva el entorno con deactivate.
(new_venv) $ deactivate
$
Tan simple, tan potente y tan útil. ¡Los entornos virtuales están para ayudarte! :D
CONSEJO: Puedes consultar dónde se instalan los paquetes con la variable sys.prefix. Pruébala en un entorno cargado y en la configuración por defecto.
>>> import sys
>>> print(sys.prefix)
Estructura de proyecto: con Cookiecutter es pan comido

La mayoría empezamos en Python con un script sencillo (seguramente el clásico "Hello World"). Si combinamos esa idea con lo que hemos visto, podemos pensar en la siguiente estructura de trabajo:
- Un directorio de trabajo que contenga
- Un directorio para el entorno virtual, y
- Un script simple con tu Hello World.
Aunque los proyectos en Python no requieren una estructura concreta, es recomendable organizar el código junto con su batería de tests y otros scripts o archivos de configuración que te ayuden durante todo el ciclo de desarrollo. Una estructura básica podría ser:
$ tree -L 1
.
├── requirements.txt ---> Dependencias del proyecto
├── src ---> Aquí va el código fuente
├── tests ---> Aquí van los tests
└── venv ---> Archivos del entorno virtual
Ya hablamos del archivo requirements.txt en la sección de pip. En él guardarás las dependencias del proyecto con pip freeze. Las carpetas src y tests contendrán la lógica de negocio y las pruebas asociadas. Y venv (suele llamarse así) guardará la configuración del entorno virtual.
Crear la estructura fácilmente: Cookiecutter
Aunque lo anterior puede bastar, a medida que mejores como desarrollador quizá quieras usar una estructura más completa con herramientas que agilicen tu trabajo. Crear esa estructura a mano puede ser tedioso. Una alternativa es mantener una copia de un proyecto de referencia y sustituir algunos contenidos al crear uno nuevo. Puede funcionar, pero es propenso a errores y puedes terminar con inconsistencias si se te olvida ajustar algo. La forma sencilla de crear nuevos proyectos es con la herramienta cookiecutter. Toma como entrada una plantilla de proyecto y genera una copia reemplazando nombres de archivos, carpetas y contenidos con parámetros que te va pidiendo. Está implementada en Python y se instala como cualquier librería de pip.
$ pip install -U cookiecutter
Recuerda: la opción -U instalará la herramienta en tu espacio de usuario. Puedes omitirla, pero entonces necesitarás instalarla como root (o con sudo). En Ubuntu también está disponible como paquete instalable con apt-get:
$ sudo apt-get install cookiecutter
En su uso más simple, se invoca así:
$ cookiecutter <TEMPLATE_LOCATION>
La plantilla puede estar en local o indicada como una URL de GIT. Esta última opción es ideal para quienes quieren mantener y evolucionar sus plantillas de proyecto.
Para entender cómo funciona, echa un vistazo a un proyecto de ejemplo. El archivo clave en cualquier proyecto de cookiecutter es cookiecutter.json, que contiene los valores que deberá indicar el usuario para crear el espacio de trabajo. Está en formato JSON e incluye un diccionario de pares clave-valor, donde los valores actúan como predeterminados si prefieres aceptar lo que viene por defecto.
{
"full_name": "Steven Loria",
"email": "sloria1@gmail.com",
"github_username": "sloria",
"project_name": "My Flask App",
"app_name": "myflaskapp",
"project_short_description": "A flasky app.",
"use_pipenv": ["no", "yes"]
}
A partir de esos valores de entrada, cookiecutter sustituirá en la plantilla los nombres de archivos y directorios que lleven dobles llaves {{...}}.
Si quieres crear tus propios arquetipos, una gran idea es arrancar un proyecto de cookiecutter e incluir todo lo que consideres valioso para desarrollar tus apps. Y si no puedes esperar para empezar, hay muchísimas plantillas listas para usar. ¿Buscas una que se ajuste a tus necesidades? Prueba con este buscador de cookiecutter. Y aún hay más: no se limita a proyectos de Python; puedes usarlo con cualquier tipo de proyecto.
Juntándolo todo: ciclo de vida de un proyecto
Una vez vistos la gestión de paquetes, los entornos virtuales y las plantillas de proyecto, podemos combinarlo todo y ver cómo trabajar configurando tu equipo según este tutorial:
- Usa Python 3 como intérprete. Mejor aún si es Python 3.6 o superior.
- Crea un proyecto nuevo, donde guardarás tus módulos de Python y dependencias.
- Hazlo fácilmente con cookiecutter y una plantilla de referencia a tu gusto.
- Crea un entorno virtual dentro de la carpeta de la aplicación y actívalo cuando vayas a programar.
- Programa la mejor app de tu vida y usa librerías de terceros si las necesitas.
- No olvides declarar las dependencias en un archivo requirements.txt usando
pip freeze.
- No olvides declarar las dependencias en un archivo requirements.txt usando
- [Opcional] Sube tu proyecto a un sistema de control de versiones como Git. No subas el contenido del entorno virtual: puedes recrearlo cuando quieras como explicamos abajo.
Cuando tengas el código y el archivo de dependencias, puedes recrear la estructura del proyecto así de fácil:
- Copia el código y el archivo de dependencias en una carpeta de trabajo (si usas Git, clona el repositorio).
- Crea un entorno virtual dentro de la carpeta de la app y actívalo para instalar las dependencias.
- Instala las dependencias con
pip install -r requirements.txt. - Sigue mejorando o corrigiendo el proyecto. No olvides añadir nuevas dependencias al requirements con
pip freeze.
Una última cosa antes de terminar. No hemos hablado de editores o IDEs para programar en Python: elige el que prefieras y ajústalo a tu forma de trabajar.
¡Feliz programación en Python!
Si quieres aprender más sobre Python, echa un vistazo al curso gratuito de DataCamp Intro to Python for Data Science.
