5장 - 패키지

Kiyong Lee·2021년 4월 17일
0

파이썬

목록 보기
13/21
post-custom-banner

패키지

패키지는 도트(.)를 사용하여 파이썬 모듈을 계층적으로 관리할 수 있게 해준다
예를 들어, 모듈 이름이 A.B인 경우에 A는 패키지 이름이 되고 B는 A패키지의 B모듈이 된다

패키지 만들기

패키지 기본 구성 요소 준비하기

  1. doit폴더에 game이란 디렉토리를 생성하고, 아래와 같은 python 파일을 생성하자

init.py
sound/init.py
sound/echo.py
graphic/init.py
graphic/render.py

  1. echo.py에 다음과 같이 만든다

def echo_test(): print("Echo")

  1. render.py에 다음과 같이 만든다

def render_test(): print("render")

  1. 다음 예제를 수행하기 전에 game패키지를 참조할 수 있도록 평령프롬프트 창에서 set 명령어로 pythonpath 환경변수에 c:/doit 디렉토리를 추가한다

set pythonpath=c:/doit
python

이렇게 입력하고, 이 다음에는 명령프로프를 이용해서 하도록 하자

패키지 안의 함수 실행하기

일단 echo.py의 함수를 실행해보자

  1. echo 모듈을 import하여 실행하는 방법으로, 다음과 같이 실행한다

import game.sound.echo
game.sound.echo.echo_test()

  1. echo 모듈이 있는 디렉토리까지 from import로 구성

from game.sound import echo
echo.echo_test()

  1. echo 모듈의 echo_test 함수를 직접 import

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에 더 이상의 모듈이 없기 때문에 사용 못 함

init.py의 용도

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

from game.sound import *
echo.echo_test()
를 하면 파이썬 3.3버전 전까지는 오류가 났다
그런데 이제 안남

오류가 날 때, init에 all 변수를 설정하고 import 할 수 있는 모듈을 설정해야 한다

all = ['echo']

  • 해서 import 할 경우, echo모듈은 오류가 안 나게 한다는 뜻인데 이젠 이런 거 선언 안 해도 됨

relative 패키지

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가 출력된다

profile
ISTJ인 K-개발자
post-custom-banner

0개의 댓글