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
- Antes de empezar
- Módulo venv incorporado
- Virtualenv
- Virtualenvwrapper
- Conclusión
- Preguntas frecuentes sobre los entornos virtuales de Python
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á usarpython3
junto con este tutorial - Si recibió un error
Unknown command
, intente ejecutarpython3
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:
Platform | Shell | Command to activate virtual environment |
---|---|---|
POSIX | bash/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 | |
Windows | cmd.exe | C:> (venv-name)\Scripts\activate.bat |
PowerShell | PS 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.
Pingback: Aplicación para compartir fotos con Django - Pacha Hosting Blog
Pingback: Cómo iniciar rápidamente un proyecto Django y una aplicación Django - Pacha Hosting Blog