2017-12-07 6 views
0

의 내가 내 프로젝트의 repo에서 테스트를 구성하기위한 다음과 같은 폴더 구조가 있다고 가정 해 봅시다 :ModuleNotFound : 없음 모듈 이름 '응용 프로그램'

def add(x, y): 
    return x + y 

:

project/ 
    app.py 
    tests/ 
     test.py 

app.py 간단한 추가 기능이를 test.py이 함수를 테스트합니다.

from app import add 
import unittest 

class TestCase(unittest.TestCase): 
    def test_add(self): 
     print('Running the test!') 
     self.assertEqual(add(3, 4), 7) 

if __name__ == '__main__': 
    unittest.main() 

(10) 모든 작동합니다

mac:project $ python tests/test.py 
ModuleNotFound: No module named 'app' 

가 어떻게이 문제를 해결할 수 있습니다 내가 직접 내가 다음과 같은 오류가 test.py를 실행하려고하면

mac:project $ nose2 
Running the test! 
Ran 1 test in 0.000s 
Ok 

문제는 무엇입니까? 내가 from ..app import app 시도했습니다

mac:project $ coverage run tests/test.py 
ModuleNotFound: No module named 'app' 

하지만이 오류 얻을 : ValueError: attempted relative import beyond top-level package

답변

0

감사합니다.

import os, sys 
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.append(parent_dir) 
0

당신이 python tests/test.py를 실행하는 이유는 내가 코드 커버리지를 측정하기 위해 coverage 패키지를 사용하려면 내가 같은 오류를 얻고있다 , 디렉토리는 파이썬 경로에 있지만 상위 디렉토리는 그렇지 않으므로 응용 프로그램을 가져올 수 없습니다.

당신은 가져 오기 test.py에서 수입하기 전에 project 디렉토리를 추가하여 작업을 얻을 수 있습니다 : 올바른 생각을했다 Alasdair에

import os, sys 
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
+0

이 좋습니다 여부 : 나는 project에서 수입을 찾기 위해 파이썬에게 test.py의 상단에 다음을 추가 할 필요가? –

+0

작동하지 않습니다. 여전히 같은 오류가 발생합니다. –

+0

예제 코드를 사용하여이를 테스트했으며 저에게 도움이되었습니다. 'sys.path'를 출력하고 마지막에'project' 폴더가 있는지 확인하십시오. 스크립트에서'sys.path'를 바꾸는 것을 싫어한다면 파이썬 경로를 환경 변수로 설정할 수 있습니다 만, 가져 오기가 작동하려면'project' 디렉토리를 파이썬 경로에 추가해야합니다. – Alasdair

관련 문제