Python no puede encontrar dateutil.relativedelta

Estoy intentando ejecutar un progtwig utilizando el paster serve pero sigo recibiendo el error:

 ImportError: No module named dateutil.relativedelta 

Estoy ejecutando python versión 2.6.7 y dateutil versión 1.5, por lo que debería estar instalado.

¿Alguien tiene alguna idea de por qué sucedería esto?

Estoy importando usando

 from dateutil.relativedelta import * 

Incluso puedo ver el paquete cuando busco:

     /usr/lib/python2.7/site-packages/dateutil/relativedelta.pyc /usr/lib/python2.7/site-packages/dateutil/relativedelta.py /usr/lib/python2.7/site-packages/dateutil/relativedelta.pyo 

    ACTUALIZAR

    Así que esta publicación tiene ya unos meses y me ganó la insignia de la Pregunta Popular, pensé que valdría la pena echarle un vistazo y ver si podía dar una buena respuesta a esta pregunta con un poco más de experiencia respaldándome.

    Inmediatamente miro esto y veo que dateutil solo está instalado para python2.7 y apuesto a que lo que estaba haciendo era esto:

     sudo yum install python-dateutil 

    A lo que sudo hubiera cambiado a la versión predeterminada de Python (es decir, Python2.7 en lugar de 2.6.4)

    Resolver esto hubiera sido tan simple como:

     su (switch to virtual environment) yum install python-dateutil 

    Usar su y luego cambiar al entorno virtual le dará acceso de root e instalará en el directorio virtual de python. El uso de sudo instalará bibliotecas en el directorio predeterminado, no en los paquetes de sitio de entornos virtuales.

    También me encontré con este problema, la solución simple que terminé usando era agregar –upgrade al final del comando. Esto lo obligó a instalarlo aunque Python pensó que estaba instalado. Esto resolvió el problema.

    Entonces, si tiene este problema, intente lo siguiente:

     sudo pip install python-dateutil --upgrade 

    Es posible que no pueda dañar nada, por lo que no hay daño en forzarlo para que se vuelva a instalar.

    Tuve un problema similar, pero por una razón más simple. Mi nuevo virtualenv simplemente no tenía dateutil instalado y no sabía el nombre del paquete Python. pip install dateutil , que obviamente no funcionó ya que el nombre del paquete era incorrecto. La ejecución de pip install python-dateutil funcionó en pip install python-dateutil lugar (sin tener que recurrir a sudo ).

    Esto me parece un problema de instalación del paquete. Lista de resolución de problemas que viene a mi mente:

    1. Verifique que haya instalado el paquete.
    2. Si está instalado, verifique que los archivos se hayan almacenado en el directorio correcto (un directorio accesible desde su intérprete de python (= en PYTHONPATH, artículo útil aquí ).
    3. Verifique el permiso en esos archivos.
    4. Reinicie su shell si ha intentado la importación allí.
    5. Reinicie su computadora (ouch … son 10 años que uso GNU / Linux, pero todavía sufro de los malos recuerdos de Windows!)

    HTH (al menos un poco!).

    Este es un hilo bastante antiguo, así que ponerlo solo para la posteridad (el comentario anterior sobre la instalación de python-dateutil me ayudó, así que tal vez mi comentario ayude a alguien más).

    Para aquellos en Mac OS (Snow Leopard, no estoy seguro acerca de otras versiones), el paquete dateutils se encuentra por defecto en:

     /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/dateutil 

    mientras que pip install escribe el paquete en:

     /Library/Python/2.6/site-packages 

    y no actualiza el archivo /Library/Python/2.6/site-packages/easy-install.pth. Como resultado, cuando importe dateutil, seguirá apuntando a la ubicación anterior, puede verificar esto con ” import dateutil; dateutil.__file__ “.

    Entonces, lo que hice (probablemente hay mejores métodos disponibles) fue cambiar el nombre del directorio antiguo ( /System/Library/.../dateutil ) a dateutil.obsolete y reiniciar python, luego ejecuté el mismo conjunto de comandos nuevamente. Esto no hace nada con el archivo de ruta o sys.path , pero omite el paquete dateutils anterior para que pueda acceder al nuevo.