도트(.)를 이용한 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다. 예를 들어 모듈명이 A,B인 경우 A는 패키지명이 되고 B는 A 패키지의 B 모듈이 된다.


패키지 예시

game/
    __init__.py
    sound/
        __init__.py
        echo.py
        wav.py
    graphic/
        __init__.py
        screen.py
        render.py
    play/
        __init__.py
        run.py
        test.py

패키지를 참조할 수 있도록 PYTHONPATH 환경변수에 디렉토리를 추가해준다.

 

패키지 함수 실행방법

  • import
    • import game.sound.echo
    • game.sound.echo.echo_test()
  • from ... import 
    • from game.sound import echo
    • echo.echo_test()
  • 함수 직접 import
    • from game.sound.echo import echo_test
    • echo_test()

 

__init__.py 용도

해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다.

__init__.py 파일이 없을 경우 import를 하면 에러를 발생시킬 수 있다.

 

__all__ 용도

from game.sound import *
echo.echo_test()

 위 코드를 실행할 경우 에러가 발생합니다. 특정 디렉터리의 모듈을 *을 이용하여 import할 때에는 다음과 같이 해당 디렉터리의 __init__.py파일에 __all__ 이라는 변수를 설정하고 import할 수 있는 모듈을 정의해 주어야한다.

# /game/sound/__init__.py
__all__ = ['echo']

__all__이 의미하는 것은 sound 디렉터리에서 * 기호를 이용하여 import할 경우 이곳에 정의된 echo 모듈만 import된다는 의미이다.

 

relative 패키지

  • 다른 디렉터리의 모듈을 사용하고 싶을때 전체경로를 추가하여 사용할 수 있다.
    • from game.sound.echo import echo_test
    • echo_test()
  • relative하게 import 가능
    • from ..sound.echo import echo_test
    • ".."은 부모 디렉터리를 의미한다.
    • graphic과 sound 디렉터리는 동일한 깊이이므로 부모 디렉터리를 이용하여 위와 같은 import가 가능하다.


'개발 > Python' 카테고리의 다른 글

Jinja2 템플릿(flask)  (0) 2018.09.10
함수  (0) 2018.09.10
클래스  (0) 2018.09.10
제어문  (0) 2018.09.10
예외 처리  (0) 2018.09.10

+ Recent posts