본문 바로가기
Python/파이썬 기초

[5-3] 패키지

by 준보틱스 2024. 6. 30.

패키지

패키지란 관련있는 모듈의 집합을 말한다. 패키지는 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다.

e.g) 가상의 game 패키지 만들기

game이라는 폴더를 만들고 game 폴더 안에 graphic, sound 폴더와 __init__.py파일을 생성하고 graphic, sound 폴더에 각각 __init__.py와 graphic에는 render.py, sound에는 echo.py를 만들었다고 가정해보자.

__init__.py 는 패키지를 표현하는 파이썬 파일이다. 그래서 이 파일 안에 패키지 관련 설정을 하는 곳이다. 만약 game, sound, graphic 등 패키지에 포함된 디렉터리에 __init__.py 파일이 없다면 패키지로 인식되지 않는다. (python 3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식하지만, 하위 버전 호환을 위해 __init__.py 파일을 생성하는 것이 안전하다.)

graphic의 render.py과 sound의 echo.py의 내용은 밑의 그림과 같다.

패키지 안 함수 실행하기

(1) echo 모듈을 import하여 실행
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
echo

(2) echo 모듈이 있는 디렉터리까지를 from ... import하여 실행
>>> from game.sound import echo
>>> echo.echo_test()
echo

(3) echo 모듈의 echo_test 함수를 직접 import하여 실행
>>> from game.sound.echo import echo_test
>>> echo_test()
echo

(4) echo 모듈의 echo_test 함수를 import하고 "e"라고 별명(?)붙혀주고 "e"로 함수 실행
>>> from game.sound.echo import echo_test as e
>>> e()
echo

패키지 변수 및 함수 정의

패키지 수준에서 변수와 함수를 정의할 수 있다. 예를 들어, game 패키지의 __init__.py  파일에 공통 변수나 함수를 정의할 수 있다.

# game/__init__.py

VERSION = 3.5

def print_version_info():
    print(f"The version of this game is {VERSION}.")

 

이렇게 패키지의 __init__.py 파일에 정의된 변수와 함수는 다음과 같이 사용할 수 있다.

>>> import game
>>> print(game.VERSION)
3.5
>>> game.print_version_info()
The version of this game is 3.5.

패키지 내 모듈 미리 import

__init__.py 파일에 패키지 내 다른 모듈을 미리 import하여 패키지를 사용하는 코드에서 간편하게 접근할 수 있게 한다.

# game/__init__.py
from .graphic.render import render_test

VERSION = 3.5

def print_version_info():
    print(f"The version of this game is {VERSION}.")

 

이제 패키지를 사용하는 코드에서는 다음과 같이 간편하게 game 패키지를 통해 render_test 함수를 사용할 수 있다.

>>> import game
>>> game.render_test()
render

"__all__"

- sound 안의 모든 모듈 다 가져오기
>>> from game.sound import *
>>> echo.echo_test()
echo

 

* 은 의미는 싹 다 불러오는 것을 의미한다. 예를 들어, from game.sound import * 는 game 안의 sound 폴더에 있는 파일들을 전부 불러오는 것을 의미한다. 하지만 *를 쓰려면 game 안의 sound폴더에 있는 init에 "__all__" 뭘 가져올 것인지 기록해야한다.

'Python > 파이썬 기초' 카테고리의 다른 글

[5-5] 내장함수  (0) 2024.12.21
[5-4] 예외 처리  (0) 2024.12.21
[5-2] 모듈  (0) 2024.06.30
[5-1] 클래스  (0) 2024.06.30
[4-2] 사용자 입출력  (0) 2024.06.30