802 votes

Tenté d’importation relative au non-package même avec __init__.py

Je suis en train de suivre PEP 328, avec la structure de répertoire suivante:

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py

En core_test.py j'ai l'instruction d'importation suivante

from ..components.core import GameLoopEvents

Cependant, quand je le lance, j'obtiens l'erreur suivante:

tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package

La recherche, j'ai trouvé ceci et cela , DONC, mais pas encore les réponses acceptées dans les questions de travail pour moi. Est-ce que je suis en manque ici?

674voto

BrenBarn Points 63718

Pour des précisions sur @Ignacio réponse: le python mécanisme d'importation des œuvres par rapport à l' __name__ le fichier en cours. Lorsque vous exécutez un fichier directement, il ne l'a pas habituelle du nom, mais il a "__main__" comme son nom au lieu. Donc relative des importations ne fonctionnent pas. Vous pouvez, comme Igancio suggéré, de l'exécuter à l'aide de l'option-m. Si vous avez une partie de votre colis, c'est la moyenne pour exécuter un script, vous pouvez également utiliser l' __package__ attribut dire que le fichier de ce nom, il est censé avoir dans la hiérarchie des paquets. Voir http://www.python.org/dev/peps/pep-0366/ pour plus de détails.

467voto

Ignacio Vazquez-Abrams Points 312628

Oui. Vous ne l’utilisez pas comme un paquet.

210voto

ihm Points 351

vous pouvez utiliser `` directement si vous avez cela au-dessus de vos importations :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X