¿Qué significa “módulo 'pruebas' importado incorrectamente”?

82

He copiado una prueba de trabajo línea por línea y solo cambié algunos nombres (al menos eso pensé) y ahora recibo este error muy críptico: (He reemplazado algunas cosas con FOO, BAR)

ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?

El problema es que no entiendo el error en absoluto. que significa este mensaje de error?

Seguimiento de pila completo:

Traceback (most recent call last):
  File "BAR/modeling/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in 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", line 30, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute
    super(Command, self).execute(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/core/management/commands/test.py", line 90, in handle
    failures = test_runner.run_tests(test_labels)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 531, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/Users/jonathan/anaconda/lib/python2.7/site-packages/django/test/runner.py", line 451, in build_suite
    tests = self.test_loader.discover(start_dir=label, **kwargs)
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 206, in discover
    tests = list(self._find_tests(start_dir, pattern))
  File "/Users/jonathan/anaconda/lib/python2.7/unittest/loader.py", line 267, in _find_tests
    raise ImportError(msg % (mod_name, module_dir, expected_dir))
ImportError: 'tests' module incorrectly imported from 'FOO/exports/tests'. Expected 'FOO/exports'. Is this module globally installed?
Jonalv
fuente
¿Puede publicar el seguimiento de la pila completo?
Daniel Hepper
Agregue el árbol de archivos involucrado, para verificar la estructura y el archivo que está intentando importartests
trinchet

Respuestas:

203

En mi experiencia, los ImportErrors extraños cuando se ejecutan pruebas son causados ​​por un ImportError en el módulo de pruebas en sí.

Asegúrese de que su módulo de pruebas se pueda importar:

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

Editar:

Si eso causa un error, asegúrese de no tener un directorio foo/exports/testsy un archivofoo/exports/tests.py

Daniel Hepper
fuente
Sí, dice que no existe tal módulo. Pero el archivo está ahí. ¿Que más puedo hacer?
jonalv
59
¿Tiene quizás un directorio foo/exports/testsy un archivo foo/exports/tests.py?
Daniel Hepper
46
Ah, había un tests.pyarchivo automágico de Django allí. Buena atrapada. Y qué mensaje de error críptico ... :(
jonalv
9
el django automatic tests.py me atrapó también
Dr Manhattan
2
¡Tu edición es lo que me salvó! Al ejecutar startapp, django creó un archivo tests.py. Pude importar tests.py en el shell
Daniel Butler
68

Como dijo Daniel Hepper en un comentario anterior, intente verificar si tiene una app/testscarpeta y un app/tests.pyarchivo en su aplicación.

Django startappcrea un tests.pyarchivo automáticamente, por lo que puede haber un archivo que no hayas notado.

Si simplemente elimina el tests.pyarchivo generado automáticamente , debería funcionar. (¡Obviamente, debe verificar el contenido del archivo antes de eliminar nada!)

Brendan Quinn
fuente
Señor impresionante, me ahorra tiempo: *
Usama Nadeem
5

En caso de que haya creado un directorio llamado tests y haya escrito archivos de prueba dentro de él, por ejemplo, test_views.py, test_models.py, etc. asegúrese de eliminar el archivo 'test.py' creado automáticamente por el comando 'python manage.py inicio de la aplicación

Vipin Gupta
fuente
1

Solo para agregar a la lista de posibles casos.

Esto también puede suceder dentro de un entorno virtual cuando el paquete en el que se encuentra se instaló localmente.

En ese caso, solo necesita desinstalar la versión que se instaló y "volver a vincularla" (no conozco el término correcto) utilizando el comando de desarrollo

~/dev/stufflib% pip uninstall stufflib
~/dev/stufflib% python setup.py develop
~/dev/stufflib% python setup.py test
Romuald Brunet
fuente
0

En mi caso, el problema fue porque traté de iniciar la tarea de prueba de django desde el enlace simbólico a la carpeta con el proyecto, no desde la ruta "real". Cuando ejecuto la tarea de prueba de django desde la carpeta del proyecto sin usar el enlace simbólico, no obtengo este error.

Aleksandr Aksarin
fuente
0

Intente comprobar si tiene ambos app/tests carpeta y una aplicación / tests.py

archivo en su aplicación.

Por defecto, un archivo se llama automáticamente tests.pyeliminar este archivo, el error se resolverá

Abednego
fuente