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

1voto

Romuald Brunet Points 1062

Juste pour ajouter à la liste des cas possibles.

Cela peut également se produire à l'intérieur d'un environnement virtuel lorsque le package sur lequel vous êtes a été installé localement.

Dans ce cas, vous devez simplement désinstaller la version qui a été installée et la "relier" (je ne connais pas le terme correct) en utilisant la commande develop

~/dev/stufflib% pip uninstall stufflib
~/dev/stufflib% python setup.py develop
~/dev/stufflib% python setup.py test

0voto

moein_py Points 23

En un mot: supprimez test.py ou le dossier des tests J'ai eu le même problème lorsque j'ai copié des tests que j'avais écrits auparavant dans l'un de mes projets dans mes nouveaux projets où j'avais plus de 5 APIs identiques. Généralement, je crée un nouveau dossier appelé tests et écris tous mes tests dans un dossier pour chaque application pour que tout soit plus propre. L'erreur que j'ai commise et qui m'a conduit à ce problème était de ne pas supprimer le fichier test.py du dossier de l'application lorsque j'ai créé le dossier des tests dans la même application Parce que vous ne pouvez pas avoir à la fois un dossier de tests et test.py dans la même application.

0voto

Dans mon cas, le problème était que j'ai essayé de démarrer la tâche de test Django à partir d'un lien symbolique vers le dossier du projet, et non à partir du chemin "réel". Lorsque je lance la tâche de test Django à partir du dossier du projet sans utiliser de lien symbolique, je n'obtiens pas cette erreur.

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