Mô-đun "'kiểm tra' được nhập không chính xác" có nghĩa là gì?


82

Tôi đã sao chép từng dòng kiểm tra đang hoạt động và chỉ thay đổi một vài tên (ít nhất là như vậy tôi nghĩ) và bây giờ tôi nhận được lỗi rất khó hiểu này: (Tôi đã thay thế một số thứ bằng FOO, BAR)

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

Vấn đề là tôi không hiểu lỗi gì cả. Tin nhắn báo lỗi này có nghĩa là gì?

Hoàn thành stacktrace:

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?

Bạn có thể đăng toàn bộ dấu vết ngăn xếp không?
Daniel Hepper

Vui lòng thêm cây tập tin có liên quan, để kiểm tra cấu trúc và các tập tin mà bạn đang cố gắng nhập khẩutests
trinchet

Câu trả lời:


202

Theo kinh nghiệm của tôi, các lỗi ImportError kỳ lạ khi chạy kiểm tra là do lỗi ImportError trong chính mô-đun kiểm tra.

Đảm bảo rằng mô-đun kiểm tra của bạn có thể được nhập:

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

Biên tập:

Nếu điều đó gây ra lỗi, hãy đảm bảo rằng bạn không có cả thư mục foo/exports/testsvà tệpfoo/exports/tests.py


Có nó nói rằng không có mô-đun như vậy. Nhưng tập tin ở đó. Tôi có thể làm gì nữa?
jonalv

59
Bạn có thể có cả thư mục foo/exports/testsvà tệp foo/exports/tests.pykhông?
Daniel Hepper

46
Ồ, có một tests.pytệp tự động Django ở đó. Tốt lắm. Và thật là một thông báo lỗi khó hiểu ... :(
jonalv

9
django automatic tests.py cũng bắt gặp tôi
Tiến sĩ Manhattan

2
Chỉnh sửa của bạn là những gì đã cứu tôi! Khi chạy startapp django đã tạo một tệp tests.py. Tôi đã có thể nhập tests.py trong shell
Daniel Butler,

68

Như Daniel Hepper đã nói trong một bình luận ở trên, hãy thử kiểm tra xem bạn có cả app/teststhư mục và app/tests.pytệp trong ứng dụng của mình hay không.

Django startapptạo tests.pytệp tự động nên có thể có tệp mà bạn không nhận thấy.

Nếu bạn chỉ cần xóa tests.pytệp được tạo tự động , nó sẽ hoạt động. (Rõ ràng là bạn nên kiểm tra nội dung của tệp trước khi xóa bất kỳ thứ gì!)


Tuyệt vời Sir, Nó tiết kiệm thời gian của tôi: *
Usama Nadeem

5

Trong trường hợp bạn đã tạo một thư mục có tên là tests và đã viết các tệp kiểm tra bên trong nó, ví dụ: test_views.py, test_models.py, v.v., hãy đảm bảo rằng bạn xoá tệp 'test.py' được tạo tự động bằng lệnh 'python management.py startapp '


1

Chỉ để thêm vào danh sách các trường hợp có thể xảy ra.

Điều này cũng có thể xảy ra bên trong một env ảo khi gói bạn đang sử dụng được cài đặt cục bộ.

Trong trường hợp đó, bạn chỉ cần gỡ cài đặt phiên bản đã được cài đặt "liên kết lại" nó (tôi không biết thuật ngữ chính xác) bằng cách sử dụng lệnh Develop

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

0

Trong trường hợp của tôi, vấn đề là do tôi đã cố gắng bắt đầu tác vụ kiểm tra django từ liên kết biểu tượng đến thư mục có dự án, không phải từ đường dẫn "thực". Khi tôi chạy tác vụ kiểm tra django từ thư mục dự án không sử dụng liên kết biểu tượng, tôi không gặp lỗi này.


0

Thử kiểm tra xem bạn có cả app/teststhư mục và app / tests.py

tệp trong ứng dụng của bạn.

Theo mặc định, một tệp được tự động gọi là tests.pyxóa tệp này, lỗi sẽ được giải quyết

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.