Comment déboguer Python échec d'importation
J'ai une structure de répertoire:
network/__init__.py
network/model.py
network/transformer/__init__.py
network/transformer/t_model.py
les deux __init__.py
fichiers appropriés
__all__ = [
"model", # or "t_model" in the case of transformer
"view",
]
Dans t_model.py, j'ai
from .. import model
mais il dit:
ImportError: cannot import name model
Si j'essaie
from ..model import Node
il dit:
ImportError: cannot import name Node
Ces sont très confus erreurs.
Edit: Même un absolu importation échoue:
import network as N
print(dir(N), N.__all__)
import network.model as M
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'transformer'] ['model', 'view']
Traceback (most recent call last):..........
AttributeError: 'module' object has no attribute 'model'
Edit: C'était une importation circulaire.
La version de Python?
La Version 2.7
ce python en ligne de commande utilisez-vous pour votre application?
La question du "Comment débogage Python import échec?" n'a pas été répondu... (bien que le problème a été résolu)
La Version 2.7
ce python en ligne de commande utilisez-vous pour votre application?
La question du "Comment débogage Python import échec?" n'a pas été répondu... (bien que le problème a été résolu)
OriginalL'auteur Neil G | 2011-05-26
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi. Pouvez-vous exécuter/importation model.py? Si elle a des erreurs de syntaxe, vous ne pouvez pas importer. (En général, je recommande pas faire relatif des importations, l'utilisation de ces derniers est limitée).
De votre absolue à l'importation est très déroutant. La façon de faire un absolu de l'importation dans ce package est:
Cela fonctionne bien.
J'ai un program.py dans le niveau supérieur (au-dessus du réseau):
à partir du réseau.transformateur d'importation t_model
Et la t_model.py ressemble à ceci:
Et la sortie est:
Donc, comme vous pouvez le voir, il fonctionne très bien votre erreur est ailleurs.
G: bien sûr. Comme je l'ai montré ci-dessus au-dessus de votre parent importations sont correct, l'erreur est ailleurs, pas dans la façon dont vous écrivez à l'importation. Maintenant, si vous avez lu ma réponse, vous verrez que je vous poser une question. Si vous voulez de l'aide sur ce, je vous suggère d'y répondre.
L'importation de model.py était le problème. Il s'est avéré que model.py a l'importation t_model.py qui importés model.py. J'étais presque tirant sur mes cheveux, sur ce point. Merci beaucoup pour votre aide.
Aussi, est-il vrai que je préférerais absolue des importations à ceux qui sont relatifs? Ou vice-versa?
G: Super! Heureux de vous aider! Dans mon expérience, vous presque jamais besoin d'un relatif des importations, et absolue des importations causent moins de confusion. 🙂
OriginalL'auteur Lennart Regebro
De cette question.
Je pense que vous pouvez également exécuter network/model.py à partir de l'annuaire ci-dessous et obtenir relatif des importations de réseau. alors...
ensuite, vous démarrez le programme avec
$ python network/model.py
. Vous pouvez ou ne pouvez pas besoin de frapper__init__.py
à la place. J'ai eu une app engine programme ciblémodule/__init__.py
et relative des importations a très bien fonctionné.__init__.py
dans chaque dossier.OriginalL'auteur Matt