"'Testler' modülü yanlış içe aktarılmış" ne anlama geliyor?


82

Bir çalışma test satırını satır satır kopyaladım ve birkaç ismi değiştirdim (en azından öyle düşündüm) ve şimdi şu şifreli hatayı alıyorum: (Bazı şeyleri FOO, BAR ile değiştirdim)

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

Sorun şu ki, hatayı hiç anlamıyorum. Bu hata mesajı ne anlama geliyor?

Tam yığın izleme:

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?

Yığın izinin tamamını gönderebilir misiniz?
Daniel Hepper

Lütfen tests
içeri aktarmaya

Yanıtlar:


207

Deneyimlerime göre, testler çalıştırılırken ortaya çıkan garip ImportErrors, test modülünün kendisindeki bir ImportError'dan kaynaklanıyor.

Test modülünüzün içe aktarılabildiğinden emin olun:

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

Düzenle:

Bu bir hataya neden olursa, hem dizininiz hem de foo/exports/testsdosyanızın olmadığından emin olun.foo/exports/tests.py


Evet, böyle bir modül olmadığını söylüyor. Ama dosya orada. Başka ne yapabilirim?
jonalv

62
Hem dizininiz hem de foo/exports/testsdosyanız olabilir foo/exports/tests.pymi?
Daniel Hepper

47
Oh, orada bir Django otomatik sihir tests.pydosyası vardı. Güzel yakalayış. Ve ne şifreli bir hata mesajı ... :(
jonalv

9
django otomatik test.py de beni yakaladı
Dr Manhattan

2
Düzenlemen beni kurtardı! Startapp django çalıştırılırken bir tests.py dosyası oluşturdu. Kabuktaki tests.py dosyasını içe aktarabildim
Daniel Butler

72

Daniel Hepper'ın yukarıdaki bir yorumda söylediği gibi, uygulamanızda hem bir app/testsklasörünüz hem de bir app/tests.pydosya olup olmadığını kontrol etmeyi deneyin .

Django otomatik olarak startappbir tests.pydosya oluşturur, böylece farketmediğiniz bir dosya olabilir.

Otomatik olarak oluşturulan tests.pydosyayı basitçe silerseniz, çalışmalıdır. (Açıkçası, herhangi bir şeyi silmeden önce dosyanın içeriğini kontrol etmelisiniz!)


1
Müthiş Efendim, Zamanımı kurtarıyor: *
Usama Nadeem

5

Test adında bir dizin oluşturduysanız ve içine test dosyaları yazdıysanız, örneğin test_views.py, test_models.py, vb. 'Python manage.py komutuyla otomatik olarak oluşturulan' test.py 'dosyasını kaldırdığınızdan emin olun. startapp '


1

Sadece olası vakalar listesine eklemek için.

Bu, bulunduğunuz paket yerel olarak yüklendiğinde sanal bir ortam içinde de olabilir.

Bu durumda, "yeniden bağla" kurulduğu sürümü kaldırmanız gerekir (doğru terimi bilmiyorum) geliştir komutunu kullanarak

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

1

Hem app/testsklasörünüz hem de uygulamanızın / tests.py olup olmadığını kontrol etmeyi deneyin.

uygulamanızda dosya.

Varsayılan olarak bir dosya otomatik olarak tests.pybu dosyayı sil olarak adlandırılır , hata çözülür


0

Benim durumumda sorun, django test görevini "gerçek" yoldan değil, symlink'ten projeli klasöre başlatmaya çalışmamdı. Django test görevini symlink kullanmadan proje klasöründen çalıştırdığımda bu hatayı almıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.