J'ai vu beaucoup d'erreurs similaires, mais je ne vois pas de solution qui s'applique à mon problème particulier.
J'essaie d'utiliser le module Akismet qui se trouve sur mon PYTHONPATH, puis, si je lance l'interpréteur interactif, lorsque j'exécute from akismet import Akismet
(comme le dit la docstring), l'erreur suivante apparaît:
from akismet import Akismet
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name Akismet
Cela fonctionnera parfaitement si votre PYTHONPATH est réglé correctement et globalement (je l’ai juste testé moi-même).
Je veux simplement attirer davantage l'attention sur la réponse de Doppelganger à sa question. J'ai eu cette erreur, et la situation est la suivante:
Vous essayez d'importer la fonction/classe X à partir d'un module appelé «stratégie.py».
Malheureusement, vous avez également créé un répertoire de paquets python appelé stratégie. En d'autres termes, vous disposez d'un répertoire appelé "stratégie", avec au moins un fichier dans le répertoire "stratégie" appelé "____init___.py".
root folder\
strategy.py (contains function/class called X)
strategy\
__init__.py
Vous oubliez ensuite le fait que vous avez créé le répertoire du paquet python et essayez d'importer une classe ou une fonction définie dans le fichier strategy.py
dans le répertoire 'racine', comme ceci
from strategy import X
Vous obtenez alors l'erreur Python error: ImportError: cannot import name X
.
Le problème réel, comme le note Doppelganger, est que l'interpréteur python donne la priorité au répertoire du paquet que vous avez créé et recherche un FILE/MODULE nommé X dans le répertoire du paquet et ignore le module actuel strategy.py
et la fonction/classe. X là-dedans que vous cherchez réellement.
C’est exactement ce à quoi vous vous attendiez et que vous souhaitiez si vous lisiez la documentation sur les paquetages Python, mais si vous changez d’avis à mi-chemin comme je l’ai fait, vous risquez de vous gratter la tête.
Vérifiez si votre PYTHONPATH correspond réellement à ce que vous attendez, par exemple. en faisant cela dans une console interactive:
In [1]: import sys
In [2]: print sys.path
akismet.py se trouve-t-il vraiment dans l'un de ces dossiers?
Vous devriez avoir le répertoire contenant le répertoire 'akismet' dans votre chemin. Je suppose que vous avez ajouté le répertoire 'akismet' à $ PYTHONPATH.
Quand tu écris:
from akismet import Akismet
Python essaie d'ouvrir le fichier akismet/Akismet.py
quelque part dans son chemin de recherche.
Tout ceci en supposant que Akismet
est un fichier et akismet
est un répertoire. S'il existe un fichier akismet.py
, le répertoire contenant ce fichier doit être répertorié dans $PYTHONPATH
.
Simple:
Maintenant, lancez votre application et vous devriez être prêt à partir.
J'oublie toujours que ipython importe les modules lorsque vous utilisez la commande run
dans l'interpréteur ipython. Les modules que vous modifiez ne seront pas réimportés. Par conséquent, aucune nouvelle variable ou fonction ne sera trouvée. Ceci est un problème connu avec ipython.
Conclusion: évitez d'utiliser run
car cela ne rechargerait pas vos modules.