99 votes

Qu'est-ce que cela signifie lorsque le module "'tests' est importé de manière incorrecte" ?

J'ai copié un test fonctionnel ligne par ligne et j'ai juste changé quelques noms (du moins je le pensais) et maintenant j'obtiens cette erreur très cryptique : (j'ai remplacé certaines choses par FOO, BAR)

ImportError: le module 'tests' a été incorrectement importé depuis 'FOO/exports/tests'. Attendu 'FOO/exports'. Ce module est-il installé globalement ?

Le problème est que je ne comprends pas du tout l'erreur. Que signifie ce message d'erreur ?

Trace complète :

Traceback (most recent call last):
  File "BAR/modeling/manage.py", ligne 10, dans le 
    execute_from_command_line(sys.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", ligne 353, dans execute_from_command_line
    utility.execute()
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", ligne 345, dans execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", ligne 30, dans run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", ligne 348, dans run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", ligne 74, dans execute
    super(Command, self).execute(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", ligne 399, dans execute
    output = self.handle(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", ligne 90, dans handle
    failures = test_runner.run_tests(test_labels)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", ligne 531, dans run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", ligne 451, dans build_suite
    tests = self.test_loader.discover(start_dir=label, **kwargs)
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", ligne 206, dans discover
    tests = list(self._find_tests(start_dir, pattern))
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", ligne 267, dans _find_tests
    raise ImportError(msg % (mod_name, module_dir, expected_dir))
ImportError: le module 'tests' a été incorrectement importé depuis 'FOO/exports/tests'. Attendu 'FOO/exports'. Ce module est-il installé globalement ?

0 votes

Pouvez-vous poster la trace complète de la pile ?

0 votes

Veuillez ajouter l'arborescence des fichiers concernés pour vérifier la structure et le fichier dans lequel vous essayez d'importer tests

244voto

Daniel Hepper Points 4992

Dans mon expérience, les ImportError bizarres lors de l'exécution des tests sont causés par un ImportError dans le module de tests lui-même.

Assurez-vous que votre module de tests peut être importé :

$ python manage.py shell
...
>>> import foo.exports.tests

Éditer :

Si cela provoque une erreur, assurez-vous de ne pas avoir à la fois un répertoire foo/exports/tests et un fichier foo/exports/tests.py

0 votes

Oui, il dit qu'il n'y a pas un tel module. Mais le fichier est là. Que puis-je faire d'autre?

0 votes

Sont à la fois foo et exports des modules Python appropriés, c'est-à-dire contiennent-ils un __init__.py?

0 votes

Oui, j'ai des fichiers __init__.py et mon éditeur (Eclipse) affiche l'icône du module et non l'icône du dossier

86voto

Brendan Quinn Points 402

Comme l'a dit Daniel Hepper dans un commentaire ci-dessus, vérifiez si vous avez à la fois un dossier app/tests et un fichier app/tests.py dans votre application.

Django startapp crée automatiquement un fichier tests.py donc il se peut qu'il y ait un fichier que vous n'avez pas remarqué.

Si vous supprimez simplement le fichier tests.py généré automatiquement, cela devrait fonctionner. (évidemment, vous devriez vérifier le contenu du fichier avant de supprimer quoi que ce soit!)

2 votes

Génial Monsieur, cela m'économise du temps :*

12voto

Vipin Gupta Points 489

Si vous avez créé un répertoire nommé tests et y avez écrit des fichiers de test, par exemple test_views.py, test_models.py, etc., assurez-vous de supprimer le fichier test.py créé automatiquement par la commande python manage.py startapp.

4voto

Abednego Points 31

Essayez de vérifier si vous avez à la fois un dossier app/tests et un fichier app/tests.py dans votre application.

Par défaut, un fichier est automatiquement appelé tests.py supprimez ce fichier et l'erreur sera résolue.

2voto

Assurez-vous de ne pas avoir 2 fichiers nommés test.py dans votre arborescence de fichiers de cette manière Python devrait choisir celui que vous vouliez.

1 votes

Cela a déjà été suggéré dans une réponse différente, envisagez de voter pour cette réponse au lieu d'en poster une autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X