web-dev-qa-db-fra.com

Python ne peut pas trouver dateutil.relativedelta

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

MISE À JOUR

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.

32
JackalopeZero

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é.

57
Jon

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).

4
david.libremone

Cela ressemble à un problème d'installation de package pour moi. Liste de dépannage qui me vient à l'esprit:

  1. Vérifiez que vous avez installé le package.
  2. S'il est installé, vérifiez que les fichiers ont été stockés dans le bon répertoire (répertoire accessible depuis votre interpréteur python (= dans PYTHONPATH, article utile ici ).
  3. Vérifiez l'autorisation sur ces fichiers.
  4. Redémarrez votre shell si vous y avez essayé l'importation.
  5. Redémarrez votre ordinateur (aïe ... ça fait 10 ans que j'utilise GNU/Linux mais je souffre toujours des mauvais souvenirs de Windows!;)

HTH (au moins un peu!).

1
mac

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.

1
Sujit Pal