본문 바로가기
Python

Python 패키지

by 오렌지마끼야또 2022. 6. 18.
728x90
반응형

 

 

 

 

파이썬 패키지는 디렉토리와 파이썬 모듈로 이루어진 구조이다.

 

 

game, sound, graphic, play는 디렉터리명이고 .py확장자를 가지는 파일은 파이썬 모듈이다. game 디렉터리가 이 패키지의 루트 디렉터리이고 sound, graphic, play는 서브 디렉터리이다.

 

패키지구조는 공동작업이나 유지보수 등에 유리하다. 또한 다른 모듈과 이름이 겹치더라도 더 안전하게 사용할 수 있다.

 

 

 

 

import 하는 방법

 

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

 

 

다음은 불가능 하다.

 

1.

imoport game

사용 : game.sound.echo.echo_test()

 -> Error

import game을 수행하면 game 디렉터리의 모듈만 사용할 수 있다.

 

2.

import game.sound.echo.echo_test

 -> Error

도트 연산자(.)를 사용해서 import a.b.c 를 할 때 마지막 c는 함수가 아닌 모듈 또는 패키지여야만 한다.

위의 3번처럼(from game.sound.echo import echo_test) form 을 써서 함수만 독립적으로 import 하는 것은 가능하다.

 

 

 

 

 

__init__.py 의 용도

위의 패키지 예 에서 각 디렉터리마다 __init__.py 가 있었다.

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

만약 game, sound, graphic 등 패키지에 포함된 디렉터리에 __init__.py 파일이 없다면 패키지로 인식하지 않는다.

-> python 3.3 법전 이상부터는 __init__.py 파일이 없어도 패키지로 인식이 돤다. 하지만 하위 버전 호환 호환을 위해 __init__.py 파일을 생성하는 것이 안전한 방법이다.

 

 

 

 

 

__all__ 의 용도

from game.sound import *

사용 : echo.echo_test()

 -> Error

특정 디렉터리의 모듈을ㄹ *을 이용하여 import 할 때에는 해당 디렉터리의 __init__.py 파일에 __all__ 이라는 변수를 설정하고 import 할 수 있는 모듈을 전의해 주어야 한다.

여기서 __all__ 의 의미는 sound 디렉터리에서 * 기호를 이용하여 import 할 경우 정의된 echo 모듈만 import 된다는 의미이다.

위와 같이 __init__.py 파일을 수정하면

from game.sound import *

사용 : echo.echo_test()

 -> echo

정상적으로 사용할 수 있다.

 

 

 

 

728x90
반응형

댓글