web-dev-qa-db-fra.com

Erreur Python: ImportError: impossible d'importer le nom Akismet

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
12
Doppelganger

Cela fonctionnera parfaitement si votre PYTHONPATH est réglé correctement et globalement (je l’ai juste testé moi-même).

  • Doit être défini sur le répertoire contenant "akismet.py", pas sur le chemin du fichier! Assurez-vous de ne pas utiliser de chemins relatifs.
  • Notez que vous devrez peut-être redémarrer/déconnecter pour appliquer les modifications de variable d'environnement à tous les programmes.
6
AndiDog

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.

15
david.barkhuizen

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?

4
Benjamin Wohlwend

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.

2
Jacek Konieczny

Simple:

  1. Assurez-vous d’avoir installé akismet (à l’échelle du système ou virtuel).
  2. Vérifiez en collant (import akismet) dans un shell python
  3. CD dans le répertoire racine de votre projet et exécutez ( find. -Name akismet.py )
  4. Si vous trouvez un fichier portant ce nom, voyez si vous pouvez le renommer.
  5. Puis lancez ( find. -Name akismet.pyc -print0 | xargs -0 rm -rf )

Maintenant, lancez votre application et vous devriez être prêt à partir.

1
un33k

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.

0
david_adler