web-dev-qa-db-fra.com

Python ne peut pas importer le nom <classe>

J'ai passé la majeure partie de la nuit à tenter de résoudre une erreur d'importation.

C'est un problème courant, mais aucune question précédente ne répond vraiment à mon problème.

J'utilise PyDev (un plugin Eclipse) et la bibliothèque Kivy (une bibliothèque Python)

J'ai une structure de fichier configurée comme ceci:

<code>
    __init__.py
    main.py
    engine.py
    main_menu_widget.py

"code" est contenu dans le dossier Eclipse "MyProject" mais ce n'est pas un paquet, donc je ne l'ai pas inclus.

Les fichiers ressemblent à ceci:

main.py

# main.py
from code.engine import Engine

class MotionApp(App):
    # Ommited

moteur.py

# engine.py
from code.main_menu_widget import MainMenuWidget

class Engine():
    # Ommited

main_menu_widget.py

# main_menu_widget.py
from code.engine import Engine

class MainMenuWidget(Screen):
    pass

L'erreur que je reçois, en détail, est la suivante:

 Traceback (most recent call last):
   File "C:\MyProject\code\main.py", line 8, in <module>
     from code.engine import Engine
   File "C:\MyProject\code\engine.py", line 6, in <module>
     from code.main_menu_widget import MainMenuWidget
   File "C:\MyProject\code\main_menu_widget.py", line 3, in <module>
     from code.engine import Engine

Une idée de ce que j'ai mal fait ici? Je viens de renommer la totalité de ma structure de dossiers parce que je me suis trompé, mais je pense que je suis proche de ce à quoi il devrait ressembler ....

8
MintyAnt

Il semble y avoir une importation circulaire. De engine.py vous importez main_menu_widget tandis que de main_menu_widgetvous importez engine.

C'est clairement une importation circulaire qui n'est pas autorisée par python.

9
Gaurav Kumar

c'est dans le même dossier, utilisez un nom de paquetage relatif (c'est quand même une bonne pratique de le faire):

from .engine import Engine
5
Brian Dilley

Votre répertoire de code est un paquet. Assurez-vous que le répertoire au-dessus de celui-ci, c’est-à-dire C:\MyProject à partir de vos messages d’erreur, se trouve dans votre PYTHONPATH.

Ouvrez le menu contextuel en sélectionnant votre projet et en cliquant sur le bouton droit de votre souris, puis sélectionnez Propriétés . Sélectionnez PyDev - PYTHONPATH et de là les Dossiers sources onglet. Vérifiez que le répertoire mentionné ci-dessus est présent; Si ce n'est pas le cas, appuyez sur Ajouter un dossier source , sélectionnez-le dans la boîte de dialogue et appuyez surOK.

1
Nicola Musatti