Maison > développement back-end > Tutoriel Python > Comment puis-je corriger les erreurs « ImportError : aucun module nommé » lors de l'utilisation de pytest avec une structure de projet hiérarchique ?

Comment puis-je corriger les erreurs « ImportError : aucun module nommé » lors de l'utilisation de pytest avec une structure de projet hiérarchique ?

DDD
Libérer: 2024-12-01 09:31:14
original
803 Les gens l'ont consulté

How Can I Fix

Résoudre les problèmes de PATH pour pytest avec des erreurs d'importation de module

Lorsque vous utilisez pytest pour exécuter des tests sur un projet avec une structure de fichiers hiérarchique, vous pouvez rencontrez des erreurs « ImportError : Aucun module nommé » lors de l'importation de modules à partir du chemin de votre application. Ce problème résulte de la nécessité de modifier le fichier sys.path pour inclure les chemins d'accès aux modules nécessaires.

Approche recommandée pour pytest >= 7 : paramètre pythonpath

Les versions 7 et ultérieures de pytest offrent une solution simplifiée utilisant la valeur de configuration pythonpath. Cela vous permet d'ajouter des chemins spécifiques à sys.path sans avoir besoin de solutions de contournement. Dans votre fichier de configuration (pyproject.toml ou pytest.ini), vous pouvez spécifier les chemins que vous souhaitez inclure, comme :

[tool.pytest.ini_options]
pythonpath = [
  "."
]
Copier après la connexion
[pytest]
pythonpath = .
Copier après la connexion

Réponse originale pour pytest < 7 : Solution conftest

Si vous utilisez une ancienne version de pytest (moins de 7), vous pouvez utiliser la solution conftest.py vide. Cela implique de créer un fichier conftest.py vide dans le répertoire racine du projet. Cela déclenche pytest pour ajouter automatiquement le répertoire parent du fichier conftest.py à sys.path, résolvant ainsi les problèmes d'importation.

Explication

Pytest recherche les modules de conftest pendant collection de tests pour rassembler des crochets et des accessoires personnalisés. Pour importer des objets personnalisés à partir de ces modules, pytest ajoute le répertoire parent de conftest.py à sys.path.

Solutions alternatives

Des solutions supplémentaires à ce problème existent, selon sur la structure de votre projet :

  • Répertoire racine du package : Placez le conftest.py fichier dans le répertoire racine du package, qui contient des sous-packages mais n'est pas un package lui-même (sans un fichier __init__.py). conftest.py dans le répertoire src peut annuler les avantages de la disposition src. Pensez plutôt à le placer dans le répertoire racine du package.
  • Conclusion

En ajustant sys.path ou en utilisant la solution conftest.py, vous pouvez résoudre le "ImportError : Aucun module nommé..." et assurez-vous que les tests sont exécutés avec succès dans votre environnement pytest.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal