본문 바로가기

Programming/Python

Do it! 공부단 6일차 | ch05 파이썬 날개달기_패키지

03 패키지

  • 패키지(Packages)는 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다.
  • 패키지 구조로 프로그램을 만들면 공동작업이나 유지 보수에 유리하다.
  • 패키지 구조로 모듈을 만들면 다른 모듈과 이름이 겹치더라도 안전하게 사용할 수 있다.

 

예시를 보자.

gmae/
	__init__.py
    sound/
    	__init__.py
        echo.py
        wav.py
    graphic/
    	__init__.py
        screen.py
        render.py
    play/
    	__init__.py
        run.py
        test.py
  • 위 구조에서 game, sound, graphic, play는 디렉터리 이름이다.
  • 확장자가 .py인 파일은 파이썬 모듈이다.
  • game 디렉터리는 패키지의 루트 디렉터리이고 sound, graphic, play 디렉터리는 서브 디렉터리이다.

 

03-1 패키지 만들기

위 구조에서처럼 game 패키지를 만들어보자.

 

우선 루트 디렉터리인 game, 서브 디렉터리인 sound, graphic을 만들고 각 디렉터리에 __init__.py파일을 넣었다.

 

#echo.py
def echo_test():
    print("echo")

#render.py
def render_test():
    print("render")

그리고 echo.py와 render.py파일을 위와 같이 각각 만들었다.

 

파일 내의 함수를 실행시켜 보자.

 

  • game 패키지를 참조하기 위해 cmd에서 환경 변수 PYTHONPATH를 사용해서 game 디렉터리가 들어있는 ch05 디렉터리의 경로를 넣어주었다.
  • 파이썬 대화형 인터프리터를 실행시키고 from game.sound import echo 명령어로 모듈을 불러왔다.
  • echo.echo_test() 명령어(모듈명.함수명)를 사용해 함수를 실행시켰다.

*import 예제에서는 항상 다음 예제를 실행할 때 인터프리터를 종료하고 다시 실행해야 한다. 그렇지 않으면 메모리에 이전에 import한 것이 남아 있어 잘못된 결과가 나올 수 있다(윈도우의 경우 종료는 exit()또는 Ctrl+Z)

 

03-2 __init__.py의 용도

  • __init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다.
  • 만약 game, sound, graphic에 이 파일이 없다면 패키지로 인식되지 않는다.

*python3.3부터는 __init__.py파일이 없어도 패키지로 인식하지만 하위 버전 호환을 위해 파일을 생성하는 것이 안전하다.

 

03-3 relative 패키지

graphic 디렉터리의 render.py 모듈에서 sound 디렉터리의 echo.py 모듈을 사용하는 법을 알아보자.

 

#render.py
from game.sound.echo import echo_test
def render_test():
    print("render")
    echo_test()

우선 render.py를 위와 같이 수정했다.

 

대화형 인터프리터에서 파일을 실행하니 이상없이 echo_test() 함수가 사용되었다.

 

#render.py
from ..sound.echo import echo_test
def render_test():
    print("render")
    echo_test()
  • render.py의 echo_test() 함수는 위와 같이 relative하게 import할 수도 있다.
  • 위 코드에서 ..은 부모 디렉터리를 의미한다.
  • graphic과 sound가 동일한 깊이(depth)이므로 부모 디렉터리(..)를 사용한 import가 가능하다.

*..과 같은 relative한 접근자는 모듈 안에서만 사용해야 한다. 파이썬 인터프리터에서 사용하면 에러가 발생한다.

 


이 글은 책 『Do it! 점프 투 파이썬』을 읽은 후 작성한 글입니다.

 

Do it! 점프 투 파이썬

코딩을 처음 배우는 중·고등학생과 나만의 경쟁력을 갖추고 싶은 문과생, 소프트웨어 시대에 대비하여 새로운 스펙을 준비하려는 직장인까지! 모두 ‘점프 투 파이썬’으로 프로그래밍을 시작

www.easyspub.co.kr