Importations relatives dans Python 3 : compréhension et solutions de contournement
Les importations relatives, couramment utilisées pour importer des modules dans le même répertoire, peuvent parfois conduire à des erreurs telles que ImportError ou ModuleNotFoundError. Comprendre les raisons sous-jacentes est crucial pour résoudre ces problèmes.
Comportement d'importation relatif dans Python 3
Dans Python 3, les importations relatives ne fonctionnent que si le module importe l'autre module est dans le même package. Un package est un répertoire contenant un fichier __init__.py, indiquant l'état de son package. Si le package contient des sous-répertoires avec des modules supplémentaires, les importations relatives de ces sous-répertoires vers des modules dans d'autres sous-répertoires échoueront.
Inclusion du package racine
Pour résoudre ce problème, assurez-vous que le répertoire parent des modules impliqués est un package, indiqué par la présence d'un fichier __init__.py. Si le répertoire parent n'est pas un package, l'importation relative échouera avec l'erreur "tentative d'importation relative sans package parent connu."
Erreur : "ModuleNotFoundError : Aucun module nommé 'mymodule'"
Cette erreur se produit lorsque le module en cours d'importation (mymodule dans ce cas) n'existe pas dans le chemin spécifié. Vérifiez que le module existe et qu'il est correctement nommé.
Erreur : "SystemError : Module parent '' non chargé, impossible d'effectuer une importation relative"
Cette erreur indique que le module le module parent (celui contenant l'importation relative) n'a pas été chargé. Assurez-vous que le module parent est en cours d'exécution ou d'importation avant de tenter l'importation relative.
Solutions de contournement pour les importations relatives
S'il n'est pas possible d'éviter les importations relatives, il existe des solutions de contournement :
Attention concernant l'exécution de scripts dans un package
Guido van Rossum, le créateur de Python considère l'exécution de scripts dans un package comme un anti-modèle et le considère comme inutile. Cependant, pour les scénarios où cela est nécessaire, les solutions de contournement ci-dessus peuvent être utilisées.
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!