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!