Py.test 이름이 *인 모듈이 없습니다.
나는 이런 폴더 구조를 가지고 있습니다.
App
--App
--app.py
--Docs
--Tests
--test_app.py
내 안에서test_app.py file
앱 모듈을 가져올 라인이 있습니다.루트 폴더에서 py.test를 실행하면 app이라는 모듈이 없다는 오류가 발생합니다.어떻게 구성해야 합니까?
하여 Python 3을 했습니다.__init__
의 파로에 .tests
모듈.
$ touch tests/__init__.py
저는, 이 도움이 합니다.pytest
가 되는 App
모듈이 위치합니다.
나는 이미 가지고 있었습니다.__init__.py
에 파일을 합니다./App/App
디렉터리에서 경로 망킹 마법 없이 프로젝트 루트에서 테스트를 실행하려고 했습니다.
python -m pytest tests
출력은 바로 다음과 같습니다.
➟ python -m pytest tests
====================================== test session starts ======================================
platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/andrew/code/app, inifile:
plugins: teamcity-messages-1.17
collected 46 items
... lines omitted ...
============================= 44 passed, 2 skipped in 1.61 seconds ==============================
▁i▁▁to▁and▁had▁had▁problem▁similar비▁a를 삭제해야 했습니다.__init__.py
에서 처터끝까를 합니다.__init__.py
에▁tests
폴더를 누릅니다.
그래서 당신은 달리고 있습니다.py.test
/App
입니까?/App/App
당신 안에 있습니다.$PYTHONPATH
?
그렇지 않은 경우, 다음을 시도하는 코드import app
이러한 메시지와 함께 실패합니다.
EDIT0: 완전성을 위해 아래 제 의견의 정보를 포함합니다.
는 앱가기시앱이내부실성다경니공합우 안에서 합니다./App/App
여기서는 그렇지 않습니다.당신은 아마도 만들기를 원할 것입니다./App/App
장포를 넣은 __init__.py
에서, 를 앱의 하세요.from App import app
.
EDIT1: 요청에 따라 아래의 두 번째 의견에서 추가 설명을 추가합니다.
를 .__init__.py
東京의 /App/App
해당 디렉토리가 패키지가 됩니다.즉, 디렉토리가 다음에 표시되는 한 해당 디렉토리에서 가져올 수 있습니다.$PYTHONPATH
즉, 당신은 할 수 있습니다.App import app
한다면/App
에 있습니다.$PYTHONPATH
으로 현재작디가추가다니됩로에 됩니다.$PYTHONPATH
그서스크실때행할를트립래▁from때에서 스크립트를 때./App
가져오기가 작동합니다.
중입니다.pytest
python -m pytest
명령은 이 정확한 것에 도움이 됩니다.
귀하의 에 포함되지 않았기 때문입니다.$PYTHONPATH
또는sys.path
pytest는 이 오류를 받습니다.
을 사용하여python -m pytest
으로 작업디를자에추다니합가로에 합니다.sys.path
달기의용리를 pytest
문서에는 다음과 같은 내용도 나와 있습니다.
" " " 를 하는 것과 거의 .
pytest
아래에 위치한 내 앱에 대한 테스트 케이스를 실행하는 동안에도 동일한 오류가 발생했습니다.
myproject
--app1
--__init.py__
--test.py
--app2
--__init.py__
--test.py
--__init.py__
테스트 사례를 실행하기 위해 프로젝트의 init.py 파일을 삭제했습니다.
TL;DR
빈을추는것좋다니습이하가항을 추가하는 이 좋습니다.conftest.py
루트 앱 폴더에 파일을 저장합니다.
질문 폴더 구조를 보면 "테스트" 폴더의 내부가 아니라 "테스트" 폴더와 동일한 수준입니다.
추가 정보:
파이테스트는 다음을 찾습니다.conftest.py
모든 프로젝트 폴더 안에 있는 파일입니다.
conftest.py
는 파일 트리 pytest에서 찾은 파일 트리에 대한 구성을 제공합니다.pytest는 conftest.py 폴더에서 시작하는 모든 하위 디렉터리를 검색하기 때문에 conftest.py 파일이 앱 루트 폴더에 있는 한 테스트 폴더 외부에서 패키지/디렉토리를 찾아야 합니다.
결국, 중복 코드를 방지하기 위해 빈 conftest.py 에 코드를 작성해야 할 수도 있습니다. 특히 여러 테스트 파일 간에 고정 장치를 공유해야 할 수도 있습니다.결국, 시험을 작성할 때는 DRY 원칙(반복하지 말 것)도 따라야 합니다.
추가 중__init.py__
또한 테스트 폴더로 이동하면 응용 프로그램 전체에서 모듈을 찾을 수 있습니다.그러나 Python 3.3+는 암시적 네임스페이스 패키지를 가지고 있기 때문에 패키지를 만들 수 있습니다.__init__.py
file. 일니다입을 만드는 것. 아까 말씀드렸듯이, 생성.__init__.py
이러한 특정 목적을 위한 파일은 파이썬 요구 사항이라기보다는 파이썬에 대한 해결책처럼 보입니다.자세한 내용은 다음과 같습니다.Python 3.3+의 패키지에는 __init_.py가 필요하지 않습니다.
저도 비슷한 문제가 생겼어요. 가상 설치 및 Pytest 추가/ 등 에는 "Pytest"를 추가/제거합니다.__init__.py
패키지에서 파일을 가져왔는데, 아무 것도 나에게 먹히지 않았습니다.
효과적인 솔루션은 다음과 같습니다(Windows 솔루션).Python 경로에 프로젝트 폴더(패키지 폴더가 아님)를 추가했습니다(PYONPATH=%PYthonPATH%;%CD% 설정).
프로젝트 폴더에서 스크립트를 실행하고 붐을 일으켰습니다. 효과가 있었습니다.
제게 효과가 있었던 것: 테스트 파일에 절대적인 가져오기를 수행하고 전화를 걸어야 했습니다.python -m test
루트 폴더에 있습니다.
저도 같은 문제에 부딪혔어요.
my-app
--conf
--my-app
--tests
설정합니다.__init__.py
을 추가했습니다. 추가했습니다.conftest.py
)pytest.fixtures
. 을 제 파일 ( . 이 내 을 Poetry 파추니다습했가일에것()에pyproject.toml
:
[tool.pytest.ini_options]
pythonpath = [
"."
내가 하이픈을 사용한 것이지 밑줄을 사용한 것이 아닙니다!
# pytest can't find Module
--my-app
# works
--my_app
저는 다음과 같은 프로젝트 구조를 가지고 있습니다.
myproject
manage.py
pyproject.toml
--apps
--app1
--app2
--tests
--apps
-- app1
-- app2
--config
--settings
base.py
local.py
init.py 을 추가하는 것은 도움이 되지 않았습니다.저는 다음과 같은 typroject.toml을 추가하여 문제를 해결할 수 있었습니다.
[tool.pytest.ini_options]
DJANGO_SETTINGS_MODULE = "config.settings.local"
솔루션은 매우 간단합니다. PYONPATH 환경 변수를 (현재 디렉터리)로 설정하십시오.
# Windows
set PYTHONPATH=.
# Linux
export PYTHONPATH=.
사용자에게 다음이 없는지 확인합니다.__init__(self)
테스트 케이스에 있는 방법입니다.
에게 효과가 : 앱으로 , 이은저에효있: 부앱로갔고으다니모,pip install -e .
(로컬 및 편집 가능한 앱 설치).
언급URL : https://stackoverflow.com/questions/20985157/py-test-no-module-named
'programing' 카테고리의 다른 글
히카리 CP를 데비안 10으로 업그레이드 (마리아드브) (0) | 2023.08.14 |
---|---|
코어 레벨 또는 ORM 레벨에서만 SQLAlchemy SQL 주입 보호 (0) | 2023.08.14 |
Django - Model Inheritance - 상위 모델의 속성을 재정의할 수 있습니까? (0) | 2023.08.14 |
$profile의 기본값을 새 값으로 변경할 수 있습니까? (0) | 2023.08.14 |
문자열의 줄 위에 반복합니다. (0) | 2023.08.14 |