본문 바로가기
Programming Language/Python

파이썬 - (패키지)

by Notorious Coder 2023. 7. 18.

이번에는 "패키지"에 대해 알아보자. 일상 생활에서도 패키지란 말은 많이 들어봤다. 여러 상품을 묶어서 파는 것이 떠오르는데 파이썬에서는 "모듈을 여러 개 묶어서 모아놓은 것"이다. 라이브러리랑 비슷한 느낌인데, 한번 직접 만들어 보자. 책에 나온대로 game 폴더를 만들고 그 안에 sound 폴더와 graphic 폴더, __init__.py 파일을 만들어 놓고, sound 폴더 안에는 echo.py 모듈과 __init__.py 파일, graphic 폴더 안에는 render.py 모듈과 __init__.py 파일을 만들자. 만들면 아래와 같이 나타난다.

 

 

 

 

여기서 __init__.py 파일은 해당 디렉터리가 패키지의 일부임을 의미한다. 지금의 파이썬 프로그램은 해당 파일이 없어도 패키지로 인식하긴 하지만 예전 버전과의 호환을 위해 그냥 파일을 생성해두자. 

 

 

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

 

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

 

 

이제 패키지를 사용하는 방법에 대해 알아보자. 

 

 

import game.sound.echo #game 폴더 안에 들어가고 sound 폴더 안에 들어가서 echo 모듈을 끌어다 쓴다.
game.sound.echo.echo_test() #그 후 거기에 있는 echo_test()함수를 사용한다.


from game.sound import echo #game 폴더 안에 들어가 sound 폴더에서 echo 모듈만을 호출한다.
echo.echo_test() #거기서 함수를 사용한다.


from game.sound.echo import echo_test #echo 모듈까지의 경로로 들어가서 echo_test()함수를 호출한다.
echo_test() #함수를 사용

 

 

 

이 3가지 방법으로 도출한 결괏값은 echo로 동일하다. 여기서 만약 echo_test() 함수를 다 입력하는 것이 귀찮다면 더 간단하게도 사용이 가능하다. 그 방법은 아래와 같다. 

 

 

from game.sound.echo import echo_test as e #저 echo_test()함수를 e라고 퉁치자.
e() #함수 e를 사용

 

 

패키지 안에 모든 모듈을 import 하는 것도 가능한데, 바로 " from game.sound import * " 와 같이 별표(*)를 사용하는 것이다. 이때 주의할 점이 있는데, 별표(*)를 사용할 때는 __init__.py 파일에 어떤 모듈을 가져올 것인지 아래와 같이 기록을 해주어야 오류가 발생하지 않는다.

 

#__init__.py
__all__ = ['echo']

#hello.py
from game.sound import *
echo.echo_test()

 

 

별표(*)를 사용할 때, __init__.py 파일의 저 대괄호( [ ] ) 안에 가져올 모듈을 모두 넣어주면 된다. 근데 패키지를 사용할 때 디렉터리가 다를 경우에는 어떻게 할까? 예를 들어, render.py 모듈에서 sound 디렉터리의 echo.py 모듈을 사용하고 싶다면 render.py 파일을 아래와 같이 수정해주면 된다. 

 

 

#첫 번째 방법
from game.sound.echo import echo_test
def render_test():
    print("render")
    echo_test()

#두 번째 방법
from ..sound.echo import echo_test
def render_test():
    print("render")
    echo_test()

 

 

두 번째 방법에서의 점(.) 두 개는 이전 디렉터리(폴더)로 돌아가라는 의미이다. sound 폴더의 이전 디렉터리는 game 폴더이므로 두 방법 모두 결국 동일한 기능을 수행한다. 

 

 

 

 

파이썬 프로그래밍에 관한 글은 "이지스퍼블리싱"의 "Do it!, 점프 투 파이썬"이라는 책을 학습하고 정리한 것입니다.

 

'Programming Language > Python' 카테고리의 다른 글

파이썬 - (모듈)  (0) 2023.07.14
파이썬 - (★클래스★)  (0) 2023.07.13
파이썬 - (사용자 입출력 ~ 파일 읽고 쓰기)  (0) 2023.07.11
파이썬 - (함수)  (0) 2023.07.10
파이썬 - (반복문 中 for 문)  (0) 2023.07.10