2010-08-16 3 views
0

점점 더 많은 스크립트를 추가 할 계획이므로 다소 조직 된 디렉토리 구조를 유지하려고합니다. 필요에 따라파일을 포함하는 적절한 방법

/src/main.py 
/src/db/<all my DB conn & table manipulation scripts> 
/src/api/<all my scripts that call different APIs> 

내 main.py 스크립트는 & DB API를 폴더에서 특정 클래스를 포함합니다 : 그래서 나는이 같은 구조를 갖고 있다고 할 수 있습니다. 각 폴더에 빈 _____init_____.py 파일이 있으므로 잘 포함되어 있습니다. 하지만 api 폴더의 스크립트에 db 폴더의 클래스를 포함시키고 싶습니까? 어떻게 든 하나의 dir을 백업해야 할 것 같은가? 이런 줄이 생기면 API 스크립트가 실패합니다.

from db.Conn import QADB 

v2.6입니다.

업데이트 : 관련 가져 오기를 시도했지만 이것을 얻으시겠습니까?

from ..db.Conn import QADB 
    ^SyntaxError: 
invalid syntax 
+1

당신이 /src/__init__.py 파일을해야합니까? –

답변

3

설정 방법은 세 가지 모듈을 만드는 것입니다.이 방법은 사용자가 원하는 것일 수도 있고 아닐 수도 있습니다. 서로 다른 작업을 관리 할 수있는 공통 모듈을하려면 다음과 같이 당신은 그것을 준비 수 :

을 :이처럼이 있고 API 및 데이터베이스 기능을 사용하려면

mymodule 
|- __init__.py 
|--database 
| |- __init__.py 
| |- dbclasses.py 
| 
|--api 
| |- __init__.py 
| |- apiclasses.py 
| 
|--other 

[etc] 

, 당신이 말하는 의해 시작

from mymodule.database.dbclasses import MyDBClass 
from mymodule.api.apiclasses import MyAPIClass 

당신이 가지고 있던 방법을주의하십시오 : 최고 "모듈"의 이름은 src (__init__.py 파일이 없기 때문에 모듈이 아닙니다)입니다.

상위 모듈 (두 하위 모듈 모두)에서 많은 공통 기능을 사용하는 경우 상단 __init__.py에 포함하고 간단히 from mymodule import MyDBClass, MyAPIClass을 호출하면됩니다. 최고 __init__.py

내용 :

from mymodule.database.dbclasses import MyDBClass 
from mymodule.api.apiclasses import MyAPIClass 
__all__ = ['MyDBClass', 'MyAPIClass'] 
+0

완벽한! 이것이 내가해야 할 일이다. 감사! – Nathan

1

를 사용하여 상대적으로 수입 :

from ..db.Conn import QADB 
+0

하. 나는 그것을 시도하는 것을 성가 시게하지 않았다. 그것이 완전히 실패 할 것이라고 생각했습니다. 그것이 내가 생각하는 것입니다. ..db.Conn 수입 QADB에서 ^ 구문 에러 :하지만이 오류 얻을 그들과 함께 몇 번을 간섭 한 후 잘못된 구문 – Nathan

+0

을 상대 수입은 여전히 ​​나에게 신비이다. – delnan

+0

src 폴더가 패키지라면, 거기에서도 가져올 수 있습니다. src.db에서 가져 오기 QADB – pmalmsten

1

FWIW, 그 구조를 좋아하지 않는다. 스크립트가하는 일에 기반하여 구조를 구성하십시오. 외부 데이터베이스 API를 호출하는 스크립트를 작성하려는 경우 어떻게해야합니까? 그것은 API 디렉토리 또는 db 디렉토리에 있습니까?

그리고 예, awesomo가 제안한대로 상대 입력을 사용하십시오.

1
는 공통 패키지에서 모든 이동

:

mypkg/main.py 
mypkg/db/... 
mypkg/api/.. 

다음 절대 수입

from mypkg.db.stuff import somestuff 

당신이 또한 달걀로 MYPKG을 배포 할 수있는이 방법을 사용합니다.

관련 문제