J'essaie d'exécuter un programme en utilisant paster serve
mais je reçois toujours l'erreur:
ImportError: No module named dateutil.relativedelta
J'utilise python version 2.6.7 et dateutil
version 1.5, il doit donc être installé.
Quelqu'un at-il une idée de pourquoi cela se produirait?
J'importe en utilisant
from dateutil.relativedelta import *
Je peux même voir le package lorsque je recherche:
/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
Donc, ce message a maintenant quelques mois et il m'a juste valu le badge Question populaire, j'ai pensé qu'il valait la peine d'y jeter un coup d'œil et de voir si je pouvais donner une bonne réponse à cette question avec un peu plus d'expérience en me soutenant.
Immédiatement, je regarde cela et je vois que dateutil
n'est installé que pour python2.7 et je parie que ce que je faisais était le suivant:
Sudo yum install python-dateutil
Sur lequel Sudo
aurait basculé sur la valeur par défaut Python (c'est-à-dire Python2.7 au lieu de 2.6.4)
Résoudre cela aurait été aussi simple que:
su
(switch to virtual environment)
yum install python-dateutil
Utiliser su
puis passer à l'environnement virtuel donnera un accès root et installera le répertoire virtuel python. Utiliser Sudo
installera les bibliothèques dans le répertoire par défaut, pas les sites-packages des environnements virtuels.
J'ai également rencontré ce problème, la solution simple que j'ai finalement utilisée était d'ajouter --upgrade à la fin de la commande. Cela l'a forcé à l'installer même si python pensait qu'il était installé. Cela a résolu le problème.
Donc, si vous rencontrez ce problème, essayez ce qui suit:
Sudo pip install python-dateutil --upgrade
Il ne peut rien faire de mal, donc il n'y a aucun mal à le forcer à être réinstallé.
J'ai eu un problème similaire mais pour une raison plus simple. Mon nouveau virtualenv n'avait tout simplement pas installé dateutil et je ne connaissais pas le nom du package Python. J'ai essayé pip install dateutil
, ce qui évidemment n'a pas fonctionné car le nom du package était incorrect. Fonctionnement pip install python-dateutil
a plutôt fonctionné (sans recourir à Sudo
).
Cela ressemble à un problème d'installation de package pour moi. Liste de dépannage qui me vient à l'esprit:
HTH (au moins un peu!).
Ceci est un fil assez ancien, donc le mettre juste pour la postérité (le commentaire précédent sur l'installation de python-dateutil m'a aidé, alors peut-être que mon commentaire aide quelqu'un d'autre).
Pour ceux sur Mac OS (Snow Leopard, pas sûr des autres versions), le paquet dateutils se trouve par défaut à:
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/dateutil
tandis que pip install écrit le package dans:
/Library/Python/2.6/site-packages
et ne met pas à jour le fichier /Library/Python/2.6/site-packages/easy-install.pth. Par conséquent, lorsque vous importez dateutil, vous pointerez toujours vers l'ancien emplacement, vous pouvez le vérifier en "import dateutil; dateutil.__file__
".
Donc ce que j'ai fait (probablement de meilleures méthodes sont disponibles) a été de renommer l'ancien répertoire (/System/Library/.../dateutil
) à dateutil.obsolete
et redémarré python, puis exécuté à nouveau le même ensemble de commandes. Cela ne fait rien au fichier de chemin ou sys.path
, mais ignore l'ancien paquet dateutils pour que vous puissiez accéder au nouveau.