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
Libérer: 2024-12-12 22:24:17
original
900 Les gens l'ont consulté

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
Copier après la connexion

Vous pouvez rencontrer le error :

ValueError: Attempted relative import in non-package
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal