복붙노트

[PYTHON] pytest의 PATH 문제 'ImportError : 모듈 이름이 YadaYadaYada'

PYTHON

pytest의 PATH 문제 'ImportError : 모듈 이름이 YadaYadaYada'

easy_install을 사용하여 Mac에 pytest를 설치하고 파일 구조가있는 프로젝트의 테스트를 작성했습니다.

repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py

repo 디렉토리에서 py.test를 실행하면 모든 것이 예상대로 작동합니다.

하지만 리눅스 나 윈도우에서 똑같은 것을 시도하면 (둘 다 pytest 2.2.3을가집니다), 응용 프로그램 경로에서 첫 번째 가져 오기를 쳤을 때마다 짖습니다. 예를 들어 앱 가져 오기 some_def_in_app에서

이 시스템에서 py.test를 실행하려면 PATH를 편집해야합니까? 누구든지 이것을 경험 했습니까?

해결법

  1. ==============================

    1.예, 테스트 디렉토리로 이동하면 원본 폴더는 파이썬의 경로가 아닙니다.

    예, 테스트 디렉토리로 이동하면 원본 폴더는 파이썬의 경로가 아닙니다.

    2 가지 선택 사항이 있습니다.

  2. ==============================

    2.py.test가 PYTHONPATH 자체에 현재 디렉토리를 추가하지 않는 이유는 모르지만 저장소의 루트에서 실행되는 해결 방법이 있습니다.

    py.test가 PYTHONPATH 자체에 현재 디렉토리를 추가하지 않는 이유는 모르지만 저장소의 루트에서 실행되는 해결 방법이 있습니다.

    python -m pytest tests/
    

    파이썬은 PYTHONPATH에 현재 디렉토리를 추가하기 때문에 작동합니다.

  3. ==============================

    3.나는 똑같은 문제가 있었다. 빈 __init__.py 파일을 테스트 디렉토리에 추가하여 문제를 해결했습니다.

    나는 똑같은 문제가 있었다. 빈 __init__.py 파일을 테스트 디렉토리에 추가하여 문제를 해결했습니다.

  4. ==============================

    4.프로젝트 루트에서 PYTHONPATH를 사용하여 실행할 수 있습니다.

    프로젝트 루트에서 PYTHONPATH를 사용하여 실행할 수 있습니다.

    PYTHONPATH=. py.test
    

    또는 pip install을 편집 가능한 가져 오기로 사용하십시오.

    pip install -e .   # install package using setup.py in editable mode
    
  5. ==============================

    5.pytest 자체를 다음과 같은 모듈로 실행하십시오. python -m pytest tests

    pytest 자체를 다음과 같은 모듈로 실행하십시오. python -m pytest tests

  6. ==============================

    6.나는 당신의 질문과 내 자신의 혼란에 대한 대답으로 이것을 만들었습니다. 나는 그것이 도움이되기를 바랍니다. py.test 명령 행과 tox.ini 모두에서 PYTHONPATH에주의하십시오.

    나는 당신의 질문과 내 자신의 혼란에 대한 대답으로 이것을 만들었습니다. 나는 그것이 도움이되기를 바랍니다. py.test 명령 행과 tox.ini 모두에서 PYTHONPATH에주의하십시오.

    https://github.com/jeffmacdonald/pytest_test

    구체적으로 : 당신은 py.test와 tox에 당신이 포함하고있는 모듈을 어디에서 찾을 수 있는지 말해야한다.

    py.test로 다음과 같이 할 수 있습니다 :

    PYTHONPATH=. py.test
    

    그리고 tox로, 이것을 여러분의 tox.ini에 추가하십시오 :

    [testenv]
    deps= -r{toxinidir}/requirements.txt
    commands=py.test
    setenv =
        PYTHONPATH = {toxinidir}
    
  7. ==============================

    7.가장 덜 침입적인 해결책은 repo / 디렉토리에 conftest.py라는 빈 파일을 추가하는 것입니다.

    가장 덜 침입적인 해결책은 repo / 디렉토리에 conftest.py라는 빈 파일을 추가하는 것입니다.

    $ touch repo/conftest.py
    

    그게 전부 야. sys.path를 mangling하기위한 커스텀 코드를 작성하거나 PYTHONPATH를 따라 드래그하거나, __init__.py를 속하지 않는 dirs에 두는 것을 잊지 마십시오.

    나중에 프로젝트 디렉토리 :

    repo
    ├── conftest.py
    ├── app.py
    ├── settings.py
    ├── models.py
    └── tests
         └── test_app.py
    

    pytest는 테스트 컬렉션에서 conftest 모듈을 찾아 사용자 정의 후크와 조명기를 수집하고, 사용자 정의 객체를 가져 오기 위해 conftest.py의 상위 디렉토리를 sys.path에 추가합니다.

    다른 프로젝트 구조를 가지고 있다면 conftest.py를 패키지 루트 디렉토리 (패키지를 포함하지만 패키지 자체가 아니기 때문에 __init__.py를 포함하지 않음)에 놓으십시오. 예를 들면 다음과 같습니다 :

    repo
    ├── conftest.py
    ├── spam
    │   ├── __init__.py
    │   ├── bacon.py
    │   └── egg.py
    ├── eggs
    │   ├── __init__.py
    │   └── sausage.py
    └── tests
         ├── test_bacon.py
         └── test_egg.py
    

    물론, conftest 모듈은 소스 코드 발견에 도움이되는 파일이 아닙니다. pytest 프레임 워크의 모든 프로젝트 별 기능 향상과 테스트 스위트의 사용자 정의가 이루어지는 곳입니다. pytest는 문서 전체에 흩어져있는 conftest 모듈에 대한 많은 정보를 가지고 있습니다. conftest.py : 로컬 디렉토리 별 플러그인으로 시작하십시오.

    또한 SO는 conftest 모듈에 대해 훌륭한 질문을 가지고 있습니다. py.test에서 conftest.py 파일은 무엇입니까?

  8. ==============================

    8.실수로 __init__.py 파일을 (모든 소스의 컨테이너 인 Python 패키지가 아닌) src 디렉토리에 추가했을 때 이상한 "ConftestImportFailure : ImportError ( 'No module named ...'오류가 발생하기 시작했습니다.

    실수로 __init__.py 파일을 (모든 소스의 컨테이너 인 Python 패키지가 아닌) src 디렉토리에 추가했을 때 이상한 "ConftestImportFailure : ImportError ( 'No module named ...'오류가 발생하기 시작했습니다.

  9. ==============================

    9.나는이 오류를 심지어 더 단순한 것으로 인해서 얻고 있었다 (당신은 심지어 사소한 말을 할 수도있다). pytest 모듈을 설치하지 않았습니다. 그래서 간단한 python-pytest를 설치하면 저를 위해 고쳐졌습니다.

    나는이 오류를 심지어 더 단순한 것으로 인해서 얻고 있었다 (당신은 심지어 사소한 말을 할 수도있다). pytest 모듈을 설치하지 않았습니다. 그래서 간단한 python-pytest를 설치하면 저를 위해 고쳐졌습니다.

    'pytest'는 테스트 종속성으로 setup.py에 나열되었을 것입니다. 테스트 요구 사항도 설치해야합니다.

  10. from https://stackoverflow.com/questions/10253826/path-issue-with-pytest-importerror-no-module-named-yadayadayada by cc-by-sa and MIT license