Maison >développement back-end >Tutoriel Python >Comment gérer les importations relatives en dehors des packages Python ?

Comment gérer les importations relatives en dehors des packages Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-12 22:24:17893parcourir

How to Handle Relative Imports Outside of Python Packages?

Gestion des importations relatives dans des contextes autres que des packages

Lors d'une tentative d'importation d'un module à l'aide d'un chemin relatif dans une structure de répertoires en dehors de Python package, tel que :

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

Vous pouvez rencontrer le error :

ValueError: Attempted relative import in non-package

Comprendre le mécanisme d'importation Python

Le mécanisme d'importation Python s'appuie sur l'attribut name du fichier actuel pour déterminer le module approprié à importer. Lors de l'exécution directe d'un fichier, le nom de "__main__", rendant les importations relatives impossibles.

Solutions possibles

Pour résoudre ce problème problème, vous pouvez utiliser l'une des méthodes suivantes :

1. Utilisation de l'option -m

Vous pouvez exécuter le fichier en utilisant l'option -m, qui ajoute le fichier à sys.path en tant que module :

python -m pkg.tests.core_test

2 . Spécification de l'attribut package

Si une partie de votre package est spécifiquement conçue pour être exécutée en tant que script, vous pouvez attribuer l'attribut package pour spécifier son nom souhaité dans le paquet hiérarchie.

import sys

if __name__ == "__main__":
    sys.__package__ = "pkg.tests"

    from ..components.core import GameLoopEvents

Référence :

Pour plus d'informations, veuillez vous référer au PEP 366 : https://www.python.org/dev/peps/pep -0366/

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn