programing

"tests' module을 잘못 가져옴"은 무엇을 의미합니까?

sourcejob 2023. 10. 6. 21:04
반응형

"tests' module을 잘못 가져옴"은 무엇을 의미합니까?

작동 중인 테스트 라인을 한 줄씩 복사하고 몇 개의 이름을 바꿨습니다(적어도 그렇게 생각했습니다). 그런데 지금 매우 난해한 오류가 나타납니다. (몇 가지 항목을 FOO, BAR로 대체했습니다)

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

문제는 제가 오류를 전혀 이해하지 못한다는 것입니다.이 오류 메시지는 무엇을 의미합니까?

전체 스택 추적:

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?

제 경험으로는 테스트를 실행할 때 이상한 ImportError는 테스트 모듈 자체의 ImportError에 의해 발생합니다.

테스트 모듈을 가져올 수 있는지 확인합니다.

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

편집:

오류가 발생하는 경우 두 디렉토리가 모두 존재하지 않는지 확인합니다.foo/exports/tests파일 하나와foo/exports/tests.py

다니엘 헤퍼가 위의 댓글에서 말한 것처럼, 당신이 둘 다 가지고 있는지 확인해보세요.app/tests폴더와 aapp/tests.py앱에 파일을 저장합니다.

장고startapp를 만듭니다.tests.py파일을 자동으로 저장하기 때문에 미처 알아채지 못한 파일이 있을 수 있습니다.

자동 생성된 를 삭제하기만 하면tests.pyfile, 작동이 되어야 합니다. (분명히 삭제하기 전에 파일 내용을 확인하셔야 합니다!)

이름이 붙은 디렉토리를 작성한 경우tests예를 들어, 그 안에 시험 파일을 작성했습니다.test_views.py,test_models.py, 등, 파일을 제거해야 합니다.test.py명령에 의해 자동으로 생성됩니다.python manage.py startapp.

당신이 둘 다 가지고 있는지 확인해보세요.app/tests폴더 및 앱/tests.py

앱에 파일을 저장합니다.

기본적으로 파일이 자동으로 호출됩니다.tests.py이 파일을 삭제하면 오류가 해결됩니다.

한 마디로 test.py 또는 tests 폴더 삭제 프로젝트 중 하나에서 이전에 작성한 테스트를 5개 이상의 동일한 API를 가진 새 프로젝트에 복사했을 때 동일한 문제가 발생했습니다.보통 저는 테스트라는 새로운 폴더를 만들고 모든 테스트를 각 앱에 대한 폴더에 적습니다. 이 문제를 해결하기 위해 제가 저지른 실수는 동일한 앱에서 테스트 폴더를 만들 때 앱 폴더에서 test.py 파일을 삭제하지 않은 것입니다. 동일한 앱에서 테스트 폴더와 test.py 을 모두 가질 수 없기 때문입니다.

가능한 사례의 목록에 추가하기 위해서입니다.

이 문제는 패키지가 로컬로 설치된 경우에도 가상 환경 내부에서 발생할 수 있습니다.

이 경우 develop 명령을 사용하여 설치된 버전을 "재링크"하면 됩니다(정확한 용어는 모릅니다).

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

저의 경우 문제는 "진짜" 경로가 아닌 symlink에서 프로젝트로 장고 테스트 작업을 시작하려고 했기 때문입니다.symlink를 사용하지 않는 프로젝트 폴더에서 장고 테스트 작업을 실행해도 이 오류가 발생하지 않습니다.

Python이 원하는 파일을 선택해야 하는 방식으로 트리 파일에 test.py 이라는 이름의 파일이 2개가 없는지 확인합니다.

언급URL : https://stackoverflow.com/questions/37525075/what-does-tests-module-incorrectly-imported-mean

반응형