Configuración de entornos virtuales en Python 3

Durante mis primeras pruebas con Python en Windows nunca he tenido problemas con la ejecución de proyectos creados con el framework Django.

Sin embargo, cuando comencé a realizar pruebas en mi distro openSUSE Linux con el mismo framework he tenido algunos problemas relacionados con las versiones de Python, y que como veremos más adelante se soluciona configurando entornos virtuales de desarrollo.

El error que me llevó a todo esto se presentó durante la ejecución del siguiente comando:
gabriel@testsrv:~/Desarrollo/miproyecto> python manage.py runserver
Traceback (most recent call last):
  File "manage.py", line 8, in 
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
gabriel@testsrv:~/Desarrollo/ciproyecto>
Esto se debió a que en mi distro Linux tenía instalado dos versiones distintas de Python, la versión 2 y la 3. Para saber que versión de Python se ejecuta por defecto podemos ejecutar el siguiente comando:
gabriel@testsrv:~> python -V
Python 2.7.9
gabriel@testsrv:~>
Como vemos la versión que se ejecuta por defecto es la 2.7.9. También podemos verificar si tenemos instalada la versión 3 de Python de la siguiente forma:
gabriel@testsrv:~> python3 -V
Python 3.4.1
gabriel@testsrv:~>
Podríamos pensar que para preparar nuestro entorno de desarrollo deberíamos desinstalar una de las versiones de Python y dejar solo la que nos interesa, pero tenemos que recordar que en nuestra distribución Linux existen otras aplicaciones que dependen de una versión o de la otra para funcionar, así que hacer eso no sería una buena elección.

Para solventar este dilema se pueden crear entornos virtuales de programación para Python, los mismos le permiten al desarrollador disponer de un entorno limpio de programación sin que podamos dañar las dependencias de nuestro sistema operativo local. Para aclarar un poco más como viene la mano vamos a crear un entorno virtual para Python 3:
  1. Como me gusta tener todo ordenado en el home de mi usuario voy a crear una carpeta llamada .virtualenvs para agrupar en la misma todas las configuraciones de entornos virtuales que deseo emplear para mis proyectos.
    gabriel@testsrv:~> mkdir .virtualenvs
    
  2. Luego procedemos a crear un entorno virtual para Python 3 mediante el uso del módulo venv que ya viene preinstalado. En este ejemplo el nombre del entorno virtual es miproyecto:
    gabriel@testsrv:~> python3 -m venv .virtualenvs/miproyecto
    
  3. Para activar el entorno virtual podemos utilizar la siguiente directiva:
    gabriel@testsrv:~> source ~/.virtualenvs/miproyecto/bin/activate
    (miproyecto) gabriel@testsrv:~>
    
    O bien la siguiente:
    gabriel@testsrv:~> . ~/.virtualenvs/miproyecto/bin/activate
    (miproyecto) gabriel@testsrv:~>
    
    Para desactivarlo ejecutamos simplemente el comando deactivate:
    (miproyecto) gabriel@testsrv:~> deactivate
    gabriel@testsrv:~>
    
  4. Para evitar tener que andar introduciendo toda la ruta cada vez que deseamos activar el entorno podemos crear un alias para simplificar la activación. Para ello necesitamos editar el archivo .bashrc del home:
    gabriel@testsrv:~> vi .bashrc
    
    y al final del script agregar el siguiente alias.
    alias activatemiproyecto="source ~/.virtualenvs/miproyecto/bin/activate"
    
    Para probar el nuevo alias tenemos que reiniciar nuestra consola (cerrar y volver abrir Konsole, Terminal, etc.) o cargar las últimas configuraciones del script .bashrc.
    gabriel@testsrv:~> source ~/.bashrc
    
    Y listo, ya podremos activar el entorno ejecutando el alias creado reciéntemente:
    gabriel@testsrv:~> activatemiproyecto 
    (miproyecto) gabriel@testsrv:~>
    
  5. Si antes de activar el entorno virtual verificamos los paquetes instalados mediante pip list, podremos ver que ya existen unos cuantos instalados en nuestro equipo:
    gabriel@testsrv:~> pip list
    apparmor (2.10.1)
    bottle (0.12.8)
    coverage (3.7.1)
    cupshelpers (1.0)
    Django (1.9.6)
    LibAppArmor (2.10.1)
    nose (1.3.7)
    pip (8.1.2)
    py (1.4.30)
    pycups (1.9.72)
    pycurl (7.19.5.1)
    pygobject (3.16.2)
    pysmbc (1.0.15.4)
    requests (2.7.0)
    setuptools (18.3.2)
    simplejson (3.8.0)
    gabriel@testsrv:~>
    
    Una vez activado el entorno virtual podremos verificar con el mismo comando que la instalación está totalmente limpia, y solo existen los dos paquetes básicos necesarios para comenzar:
    (miproyecto) gabriel@testsrv:~> pip list
    pip (1.5.6)
    setuptools (2.1)
    (miproyecto) gabriel@testsrv:~>
    
    Ahora solo nos resta instalar los paquetes adicionales que necesitamos para comenzar a trabajar:
    (miproyecto) gabriel@testsrv:~> pip install django
    Downloading/unpacking django
      Downloading Django-1.9.6-py2.py3-none-any.whl (6.6MB): 6.6MB downloaded
    Installing collected packages: django
    Successfully installed django
    Cleaning up...
    (miproyecto) gabriel@testsrv:~> pip list
    Django (1.9.6)
    pip (1.5.6)
    setuptools (2.1)
    (miproyecto) gabriel@testsrv:~>
    

Fuentes

Comentarios

  1. Navegue como por 10 paginas (mínimo) y ninguna daba con la solución... ¡excelente post!

    ResponderEliminar
    Respuestas
    1. Gracias Martín por tu comentario, saludos.

      Eliminar

Publicar un comentario

Entradas populares