La mayoría de los recién llegados a Python no saben cómo configurar un entorno de desarrollo que siga los últimos estándares utilizados por los programadores profesionales. Este tutorial le enseñará cómo crear correctamente un entorno de desarrollo de Python completamente funcional utilizando las mejores prácticas aceptadas por la industria.

Tabla de contenidos

Entornos Virtuales

Un entorno virtual nos ayuda a resolver conflictos de dependencia del proyecto mediante la creación de entornos aislados. Estos «entornos aislados» contienen todas las ventajas que los programadores de Python pueden necesitar para desarrollar sus proyectos. Los entornos virtuales incluyen un nuevo duplicado de los archivos binarios de Python y una copia independiente de toda la biblioteca estándar de Python. Es por eso que puede funcionar por sí mismo. El uso de entornos virtuales nos aporta las siguientes ventajas:

  • Somos capaces de mantener intactos los paquetes de nuestras máquinas locales
  • Podemos compartir dependencias con otros con un archivo requirements.txt
  • podemos implementar una aplicación Python en un servidor dedicado (PythonAnyWhere, Heroku, etc.)

La necesidad de entornos virtuales

Utilizo muchas bibliotecas para mis proyectos. Entre ellos hay tres marcos de desarrollo de aplicaciones web, y hay otras bibliotecas que me gustaría explorar en el futuro. Esto sirve como el argumento principal de que los proyectos serios en Python dependen de otros paquetes escritos por otros desarrolladores. Si eres un desarrollador de Django, estoy seguro de que usas el marco de trabajo REST de Django para crear potentes API REST, la barra de herramientas de depuración de Django para recopilar información de depuración sobre la solicitud/respuesta actual, Celery para encargarse de las operaciones en tiempo real y la programación también, y así sucesivamente. Por ejemplo, dependo en gran medida del paquete de requests para algunos de mis proyectos, y una aplicación web de Django en la que estoy trabajando actualmente depende de la versión 2.3.0. Según la documentación oficial, en el momento de escribir este artículo, la última versión de este paquete es la versión 3.2. Supongamos que sigo adelante e instalo la última versión de la biblioteca en mi máquina Ubuntu porque la necesito para otro proyecto. Todo parece funcionar bien hasta que trato de hacer uso de mi proyecto anterior, que funcionaba bien con 2.3.0. De repente, todo se rompe. ¿¿Qué pasó? ¿Quizás la API de la última versión de Django ha cambiado desde la versión 2.3.0? La razón no importa en este momento, ya que mi proyecto anterior está roto y ya no funciona. Se ha creado un conflicto entre dos proyectos. Hacen uso de la misma biblioteca, pero requieren diferentes versiones de la misma. Varios paquetes resuelven este problema. Veamos algunos que se destacan.

Antes de empezar

En este tutorial, usaremos Python 3, así que comencemos por verificar su instalación de Python. Para ello, abra un terminal (cmd/PowerShell en Windows) y escriba el siguiente comando:

python --version

Python 3.9.5 # My result

Nota: La mayoría de los sistemas macOS y Linux tienen Python instalado. Puedes consultar la guía de instalación de Python si utilizas Windows. Si no obtuviste un resultado de la forma Python 3.x, hay dos opciones:

  • Si este comando devolvió una versión de Python 2.x, deberá usar python3 junto con este tutorial
  • Si recibió un error Unknown command, intente ejecutar python3 y, si obtiene otro error, siga la guía de instalación de Python

Puedes probar la existencia del binario python3 comprobando su versión:

python3 --version

Python 3.9.5

Nota: si el comando anterior funcionó, deberá ejecutar python3 en lugar de python. Ahora que sabe qué comando de Python se ejecuta en su máquina, entremos en entornos virtuales.

Módulo venv incorporado

Usemos el módulo venv de Python incorporado para crear su primer entorno virtual. Nota: para usar este módulo necesita Python 3.3 o superior instalado en su sistema. Para crear un entorno virtual de Python con venv, escriba el siguiente comando:

python -m venv virt1

Nota: el indicador -m significa que Python está ejecutando el módulo venv incorporado como un script. Esto creará un entorno virtual con el nombre de virt1, pero esto es solo un argumento. Puede crear el entorno virtual con el nombre que desee. Todo lo instalado en el directorio virt1 no afectará a los paquetes globales ni a las instalaciones de todo el sistema, evitando así conflictos de dependencia.

Activación de entornos virtuales

Es crucial saber que cada vez que queramos utilizar un entorno virtual creado, debemos activarlo con el siguiente comando:

source virt1/bin/activate

Esto no funcionará en todos los sistemas, por lo que puede consultar la siguiente tabla para tener una idea clara de qué comando usar:

PlatformShellCommand to activate virtual environment
POSIXbash/zsh$ source (venv-name)/bin/activate
fish$ source (venv-name)/bin/activate.fish
csh/tcsh$ source (venv-name)/bin/activate.csh
PowerShell Core$ (venv-name)/bin/Activate.ps1
Windowscmd.exeC:> (venv-name)\Scripts\activate.bat
PowerShellPS C:> (venv-name)\Scripts\Activate.ps1

Nota: el signo $ en POSIX y los signos C:>PS C:> en Windows no forman parte del comando. Como puede notar, estoy usando un shell bash en un POSIX (macOS y Linux), por lo que estoy ejecutando el comando anterior.

Una vez creado el entorno

Una vez que se activa el entorno virtual, el indicador del terminal cambia un poco.

El siguiente comando le permite desactivar el entorno virtual:

deactivate

Observe cómo el indicador de su terminal ha cambiado nuevamente.

Ahora active su entorno virtual nuevamente y use el comando which para verificar el binario de Python que se está utilizando:

source virt1/bin/activate
which python

Si todo funcionó bien, debería obtener algo similar al siguiente resultado:

/home/daniel/tests/python-tests/venvs/virt1/bin/python

Si deactivate y which a utilizar, debería obtener una salida diferente:

deactivate
/usr/bin/python

Esto se debe a que, cuando se trabaja dentro de un entorno virtual, se está utilizando la copia binaria colocada dentro de ese entorno. Lo mismo se aplica a los paquetes.

Pip con entornos virtuales

Aunque esta no es una guía de pips, es importante mostrar el flujo de trabajo entre pip y los entornos virtuales. pip, cuyo nombre significa «Pip Installs Packages», es un administrador de paquetes que se utiliza para instalar y administrar paquetes de Python. Es extremadamente útil cuando desea distribuir su proyecto a otros, ya que permite a otros desarrolladores, y usuarios finales, instalar todas las dependencias de su proyecto de un vistazo. Por ejemplo, un compañero desarrollador puede activar un entorno virtual y, a continuación, ejecutar el siguiente comando para instalar las dependencias del proyecto:

pip install -r requirements.txt

Aquí, requirements.txt es el archivo que contiene todas las dependencias del proyecto, las versiones específicas de los paquetes. Para generar el archivo de dependencias de su proyecto, puede ejecutar el siguiente comando:

pip freeze > requirements.txt

Si desea instalar una versión específica de un paquete, puede ejecutar pip install seguido del nombre del paquete, el doble signo igual (==) y su versión:

pip install package==version

En otras situaciones, también podemos desinstalar un paquete de nuestra máquina (o entorno virtual):

pip uninstall some-package-name

Virtualenv

Virtualenv es un paquete externo que se utiliza para crear entornos virtuales. En realidad, el venv incorporado de Python es un subconjunto de él, por lo que virtualenv tiene más características que la primera opción que vimos. Puede obtener más información sobre las ventajas de virtualenv sobre venv en la documentación oficial. Por ahora, vamos a instalar virtualenv con pip (asegúrate de haber desactivado el venv anterior) haciendo uso del siguiente comando:

pip install virtualenv

Esta herramienta funciona de manera similar a venv, así que vamos a probarla creando otro entorno virtual:

virtualenv virt2

Nota: asegúrese de deactivate el otro entorno antes de ejecutar el comando anterior. Al igual que con venv, debemos activar el entorno virtual antes de usarlo:

source virt2/bin/activate

Si ahora instalo la versión más reciente de las solicitudes, se instalará solo en el entorno virtual venv2:

pip install requests

El comando anterior produce el siguiente resultado:

Collecting requests
 ...
Installing collected packages: urllib3, idna, chardet, certifi, requests
Successfully installed certifi-2021.5.30 chardet-4.0.0 idna-2.10 requests-2.25.1 urllib3-1.26.5

Si ejecuto el comando pip freeze, que imprime una lista de todos mis paquetes instalados, obtendré esto:

certifi==2021.5.30
chardet==4.0.0
idna==2.10
requests==2.25.1
urllib3==1.26.5

Como puede ver, los únicos paquetes que recibo son la última versión de requests, en el momento de escribir este artículo, y sus dependencias.

Otras características de Virtualenv

Podemos usar el indicador -p mientras trabajamos con virtualenv para usar una versión específica de Python que esté instalada globalmente en la máquina. Por ejemplo, se puede usar el siguiente comando para crear el entorno virtual virt2 con Python3 en él, si tiene Python3 instalado en su máquina:

virtualenv -p /usr/bin/python3 virt2

Y para eliminar un entorno virtual, use el comando rm -r como lo hace con cualquier otro directorio que desee eliminar:

rm -r virt2

Puede obtener más información sobre el uso avanzado de la interfaz virtualenv CLI en la documentación oficial

Virtualenvwrapper

Virtualenvwrapper proporciona comandos muy útiles que facilitan aún más el trabajo con entornos virtuales, al organizarlos todos en un lugar sencillo. Al igual que con virtualenv, se puede instalar fácilmente con pip.

pip install virtualenvwrapper

Esto creará un archivo de shell virtualenvwrapper.sh ubicado en su directorio ~/.local/bin/. Esta carpeta se utiliza para almacenar binarios de paquetes que le permiten usar paquetes de Python directamente desde su terminal. Antes de usar virtualenvwrapper, deberá editar el archivo de configuración de shell. Dado que estoy usando un shell bash, agregaré el siguiente contenido al archivo .bashrc, ubicado en mi directorio de inicio:

cat <<EOT>> ~/.bashrc
# Virtualenwrapper settings
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV=~/.local/bin/virtualenv
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Documents
source ~/.local/bin/virtualenvwrapper.sh
EOT

Esto agregará (escriba al final del archivo) el contenido anterior al archivo .bashrc. Si el comando anterior no funcionó, abra el archivo y modifíquelo manualmente. El VIRTUALENVWRAPPER_PYTHON apunta al binario de Python de su máquina. Puedes comprobarlo con el siguiente comando (sin ningún entorno virtual activado):

which python

/usr/bin/python # My result

Asegúrese de modificar el archivo .bashrc de acuerdo con su ruta binaria de Python. Nota: si está usando Windows, puede usar virtualenvwrapper-win. Luego, volvemos a cargar el shell bash con los cambios que hicimos en el archivo .bashrc ejecutando el siguiente comando:

source ~/.bashrc

Ahora, el comando mkvirtualenv se puede usar para crear fácilmente nuevos entornos colocados de forma predeterminada dentro de esta carpeta:

mkvirtualenv sitepoint

Puede ver la carpeta del entorno virtual sitepoint ingresando a la ruta WORKON_HOME, que definimos anteriormente como $HOME/.virtualenvs:

ls ~/.virtualenvs

sitepoint # Virtual env folder

Para obtener una lista de todos los entornos virtuales creados por virtualenvwrapper, puede ejecutar el comando workon sin argumentos:

workon

sitepoint # My result

Podemos activar fácilmente el entorno virtual con la ayuda del comando workon:

workon sitepoint

El comando para desactivar el entorno virtual es el mismo que el que usamos antes:

deactivate

Es muy fácil cambiar entre diferentes entornos virtuales. Por ejemplo, para workon otro entorno virtual:

workon another_virtualenv

Para eliminar un entorno virtual, se debe utilizar el comando rmvirtualenv:

rmvirtualenv sitepoint

Conclusión

En este tutorial, has aprendido sobre el flujo de trabajo esencial que todo desarrollador de Python debe dominar. Los entornos virtuales son una parte crucial de cualquier proyecto colaborativo de Python, y puede mejorar instantáneamente su productividad al usarlos. Las herramientas están ahí fuera. Ahora es el momento de incorporarlos a proyectos personales desafiantes. ¿Utilizas algún otro enfoque interesante en tu flujo de trabajo de desarrollo de Python? 

Preguntas frecuentes sobre los entornos virtuales de Python

¿Cuál es la diferencia entre venv y virtualenv en Python?

Tanto venv como virtualenv son herramientas en Python que le permiten crear entornos aislados de Python. Sin embargo, hay algunas diferencias clave entre los dos. Venv es un módulo integrado de Python disponible a partir de Python 3.3, mientras que virtualenv es un paquete de terceros que se puede usar con Python 2.7 y superior. Venv crea entornos que comparten el directorio site-packages del sistema Python, mientras que virtualenv crea entornos completamente aislados. Esto significa que con venv, aún puede acceder a los paquetes de todo el sistema, mientras que con virtualenv, debe instalar todos los paquetes que necesita dentro del entorno.

¿Cómo se utiliza pip en un entorno virtual?

Para usar pip en un entorno virtual, primero debe activar el entorno. Una vez activado el entorno, puede usar pip para instalar paquetes como lo haría normalmente. Estos paquetes solo se instalarán en el entorno virtual y no afectarán a la instalación de Python en todo el sistema. Para desactivar el entorno y volver a Python en todo el sistema, puede utilizar el comando ‘desactivar’.

¿Puedo crear un entorno virtual sin pip?

Sí, es posible crear un entorno virtual sin pip. Cuando crea un entorno virtual usando venv o virtualenv, incluirá pip de forma predeterminada. Sin embargo, si desea crear un entorno sin pip, puede usar la opción ‘–without-pip’ con el comando virtualenv.

¿Cómo administro varios entornos virtuales?

La gestión de múltiples entornos virtuales se puede realizar utilizando herramientas como virtualenvwrapper o pyenv. Estas herramientas proporcionan comandos para crear, eliminar y cambiar entre diferentes entornos virtuales. También le permiten mantener todos sus entornos en un solo lugar, lo que facilita su administración.

¿Puedo compartir un entorno virtual con otras personas?

Aunque es técnicamente posible compartir un entorno virtual copiando el directorio del entorno, generalmente no se recomienda. Esto se debe a que el entorno incluye rutas de acceso y dependencias específicas que pueden no funcionar en otra máquina. En su lugar, es mejor compartir un archivo ‘requirements.txt’, que enumera todos los paquetes utilizados en el proyecto. Otros pueden usar este archivo para crear un entorno idéntico en su propia máquina.

¿Cómo actualizo paquetes en un entorno virtual?

Para actualizar paquetes en un entorno virtual, puede utilizar el comando ‘pip install –upgrade’ seguido del nombre del paquete. Esto actualizará el paquete especificado a la última versión. Recuerde activar el entorno antes de ejecutar este comando.

¿Cuál es el propósito de una carpeta .venv en un proyecto de Python?

La carpeta .venv en un proyecto de Python es donde se almacena el entorno virtual de ese proyecto. Contiene todos los archivos y directorios necesarios para el entorno, incluido el intérprete de Python, las bibliotecas y los scripts.

¿Cómo se usa un entorno virtual con un IDE como PyCharm o VS Code?

La mayoría de los IDE modernos, como PyCharm o VS Code, tienen compatibilidad integrada con entornos virtuales de Python. Por lo general, puede especificar la ruta de acceso al entorno en la configuración del IDE. Una vez configurado, el IDE utilizará el intérprete de Python y los paquetes del entorno especificado.

¿Puedo usar diferentes versiones de Python en diferentes entornos virtuales?

Sí, uno de los principales beneficios de usar entornos virtuales es la capacidad de usar diferentes versiones de Python en diferentes entornos. Esto puede ser útil si tiene proyectos que requieren diferentes versiones de Python.

¿Cómo elimino un entorno virtual?

Eliminar un entorno virtual es tan sencillo como eliminar el directorio del entorno. Sin embargo, asegúrese de desactivar primero el entorno si está activo actualmente.

Aplicación para compartir fotos con Django
Desarrollo de plugins de WordPress (básico)