56
votes

Tentative d'importation relative sans package parent connu

from ..box_utils import decode, nms
This line is giving error
  ImportError: attempted relative import with no known parent package
What is this error and how to resolve this error?

0 commentaires

3 Réponses :


8
votes

Apparemment, box_utils.py ne fait pas partie d'un package. Vous pouvez toujours importer des fonctions définies dans ce fichier, mais uniquement si le script python qui tente d'importer ces fonctions réside dans le même répertoire que box_utils.py , consultez cette réponse .

Nota bene: Dans mon cas, je suis tombé sur cette erreur avec une instruction import avec un point, comme ceci: from .foo import foo . Cette syntaxe, cependant, indique à Python que foo.py fait partie d'un package, ce qui n'était pas le cas. L'erreur a disparu lorsque j'ai supprimé la période.


0 commentaires

2
votes

Si un dictionnaire différent contient script.py , il est accessible depuis la racine. Par exemple:

Si votre programme est structuré:

alpha
  > beta
    > delta
  > gamma
    > epsilon
    > zeta

alpha , beta , gamma , delta , epsilon et zeta sont des répertoires différents. Un script du répertoire epsilon peut être appelé par:

from alpha.gamma.eplsilon import script


3 commentaires

Mais que faire si vous souhaitez importer un fichier sans référencer le package racine? Par exemple, que se passe-t-il si l'on veut importer gamma/epsilon.py depuis delta avec une référence relative (c'est-à-dire ne faisant pas référence à alpha )


@svangordon Cela m'intéresserait aussi. Ou en d'autres termes, beta est un package et gamma est un autre package. Mais ce ne sont pas deux sous-packages d'alpha. Comment gérer cela?


@svangordon: Je suppose que je l'ai compris. Si les deux sont des packages (c'est-à-dire qu'il y a des fichiers _ _ init _ _ .py en beta et gamma, mais pas en alpha), allez dans le répertoire alpha et tapez: pip install -e . . Je n'ai pas essayé lorsque deux packages sont dans ce répertoire, mais au moins s'il n'y a qu'un seul package dans le répertoire et que vous faites cela, vous pouvez dans un autre type de fichier Python import beta ou import beta.delta



0
votes
from .foo import func
...

0 commentaires