2013-12-19 2 views
8

저는 이것을 해결할 방법을 찾고있었습니다.Python 가져 오기 모듈, 폴더 구조

나는 파이썬 프로젝트를 가지고 있고, 이것은 내가 원하는 폴더 구조입니다 :

/project/main.py 
/project/src/models.py 
/project/test/tests.py 

내가 터미널에서 tests.py을 실행하여 테스트를 실행 할 수 있어야합니다. tests.py는 테스트를 위해/project/src /에 모듈을 가져옵니다. 먼저 tests.py에 sys.path.insert(0, '..')을 추가하여이 문제를 해결했습니다. 그러나 models.py에 사용 된 경로는 tests.py 등과 관련이 있어야합니다. 즉, main.py에서 발생했을 때 프로그램이 실행되지 않는다는 것을 의미합니다. 경로의 원인 .

또한 from ..src.models import *과 같이 모듈을 tests.py에 가져올 때 dots으로 시도했지만 "비 패키지에서 상대 가져 오기 시도"오류 메시지가 나타납니다.

models.py에서 모듈을 가져 오려면 tests.py의 맨 위에 무엇을 넣어야합니까?

+0

어떤 Python 버전을 사용하고 있습니까? – jpmc26

+0

Python 버전 2.7.5 – user1121487

답변

3

당신이 사용하고있는 구조는 내가 권하는 것이 아니지만, 나는 보통 파이썬 프로젝트가 어떻게 구성되어 있는지에 대한 필자의 신조어이다.

1)가 패키지로 취급하고 있는지 확인하는 /project, /project/src/project/test 내부에 __init__.py 파일을 배치 :이 필요하시면 할 것으로 판단된다.

2) from __future__ import absolute_import을 각 파이썬 파일의 맨 위에 놓습니다.

from .src import models 

4) 당신은 다른 응용 프로그램을 시작해야합니다 :

test.py :

from ..src import models 

main.py

3) 그런 다음 상대 수입을 사용합니다. 이 시작점이 있다면 나는 확실히 src 내부 main.py을 둘 것, 내 자신의 프로젝트에 대한

python -m project.main 

: 현재 디렉토리와 프로젝트에이 방법을 실행 (파일 시스템 루트로 나타납니다) /project의 부모인지 확인 귀하의 응용 프로그램의. tests.pysrc에 넣을 수도 있지만 그렇지 않은 경우에는 코드 대신 명령 행에서 을 테스트 러너의 Python 경로에 추가합니다.

나는 여전히 absolute_import을 사용합니다. 내 경험에 의하면, 그것은 조직을 모듈에 매우 깨끗한 솔루션, 그리고 일이 파이썬에서 기본적으로 작동 어떻게이기도 3. 먼저 src 디렉토리에 main.py .. 당신의 검사 결과에

을 넣어

+0

나는 여전히 이것을 얻었습니다 : ValueError : 비 패키지에서 상대적 가져 오기를 시도했습니다. 나는 지금 어디에서나 __init__.py를 얻었습니다. – user1121487

+0

@ user1121487 예. 그냥 깨달았다. 죄송합니다. 이미 편집하지 않았다면 수정해야합니다. – jpmc26

+0

여전히 같은 오류 메시지가 나타납니다. – user1121487

0

을 수행 할 수 있습니다 do, sys.path.당신은 내가 당신의 프로그램이 실행됩니다 thisway 당신이

import os 
os.chdir('relative path to the src dir') 

를 추가 제안 응용 프로그램을 실행하는 곳에서 관계없이 특정 디렉토리에 있어야 실행을 강제로 좋아하면 ('src 디렉토리')

를 추가 지정한 디렉토리에서 코드에있는 상대 경로를 존중합니다.