A todos nos ha pasado que viendo/leyendo un tutorial de alguna herramienta o framework hemos escuchado/leído al tutor decir, “este archivo sirve para configurar los entornos de la aplicación” o “estas son dependencias para el entorno de desarrollo”, así que lo primero que cabe preguntarse acá es, ¿qué es un entorno?.

Entorno (Enviroment)

Un entorno, dentro del desarrollo software, es el contexto en el cual este se ejecuta, se refiere a sistema operativo, versión del lenguaje de programación, librerías, complementos, permisos de usuario, etc, es decir, todo aquello que requiera la aplicación para su correcto funcionamiento.

Diferentes entornos

Además de lo antes mencionado, las diferentes etapas de la vida del software hacen que no siempre se requiera que este se comporte igual, es decir, si está en desarrollo se querrá que brinde más información sobre los errores que puedan ocurrir (porque en teoría es donde con mayor probabilidad deberían hacerse presentes) que cuando se lo mostremos al cliente (producción).

¿Por qué es una buena practica el uso de manejadores de entornos virtuales?

Bien sea que estés desarrollando en un equipo personal, en un servidor desarrollo dedicado o desplegando la aplicación en un servidor de producción, es probable que te veas con la necesidad de trabajar en varios proyectos. Proyectos que puedan tener requerimientos similares y por ello entrar en conflicto entre si.

Los manejadores de entornos como Virtualenv en Python, NVM de Nodejs, RVM en Ruby, entre otros, permiten aislar la aplicación de la configuración global del lenguaje de programación, y su correspondiente manejador de paquetes (pip, npm, gem), que exista en el sistema operativo. Así puedes tener una versión de una librería para un proyecto, y la misma librería en otro proyecto con otra versión. Y no solo con librerías y paquetes es útil, puedes tener una versión del lenguaje de programación diferente en cada entorno. En fin puedes definir el contexto de tu aplicación con precisión usando estas herramientas.

Entornos virtuales + manejadores de dependencias = Portabilidad

Todo lo antes mencionado se complementa con la capacidad de poder trasportar este entorno de un computador a otro sin mucho o ningún sufrimiento, todos los lenguajes modernos te permiten definir en un archivo las dependencias de tu proyecto.

No confundir los manejadores de dependencias con entornos virtuales, unos pueden usarse sin los otros pues son proyectos independientes. Es una recomendación personal usarlos en conjunto, pero al final dependerá de la naturaleza de tu proyecto.

Solo por mencionar algunos ejemplos:

  • Bundler + RubyGems (Ruby)
  • PIP + Virtualenv (Python)
  • NPM + NVM (Nodejs)

¿Qué otras combinaciones conoces tu? ¿Cuales me recomendarías probar?

One thought on “Entornos virtuales, ¿qué son? y ¿para que sirven?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.