패키지는 도트(.)를 사용하여 파이썬 모듈을 계층적으로 관리할 수 있게 해준다
예를 들어, 모듈 이름이 A.B인 경우에 A는 패키지 이름이 되고 B는 A패키지의 B모듈이 된다
init.py
sound/init.py
sound/echo.py
graphic/init.py
graphic/render.py
def echo_test(): print("Echo")
def render_test(): print("render")
set pythonpath=c:/doit
python
이렇게 입력하고, 이 다음에는 명령프로프를 이용해서 하도록 하자
일단 echo.py의 함수를 실행해보자
import game.sound.echo
game.sound.echo.echo_test()
from game.sound import echo
echo.echo_test()
from game.sound.echo import echo_test
echo_test()
하지만 echo_test() 함수를 다음과 같이 사용하는 건 불가능하다
첫 번째
import game
game.sound.echo.echo_test()
두 번째
import game.sound.echo.echo_test
첫 번째는
import game을 실행하면, game 디렉터리의 모듈 또는 game 디렉토리의 init.py에 정의한 것만 참조할 수 있다
두 번째는 echo_test에 더 이상의 모듈이 없기 때문에 사용 못 함
해당 파일은 디렉토리가 패키지의 일부임을 알려주는 역할을 한다
from game.sound import *
echo.echo_test()
를 하면 파이썬 3.3버전 전까지는 오류가 났다
그런데 이제 안남
오류가 날 때, init에 all 변수를 설정하고 import 할 수 있는 모듈을 설정해야 한다
all = ['echo']
graphice 디렉토리의 render.py 모듈이 sound 디렉토리의 echo.py 모듈을 사용하고 싶다면?
그럴 경우 사용하기를 원하는 쪽의 모듈을 수정하면 된다
render.py의 경우
from game.sound.echo import echo_test
def render_test():
print("render")
echo_test()
이렇게 echo.py의 사용할 함수를 import 해주면 된다
수정 후
from game.graphic.render import render_test
render_test()
하면 render와 echo가 출력된다