파이썬 패키지는 디렉토리와 파이썬 모듈로 이루어진 구조이다.
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
정상적으로 사용할 수 있다.
'Python' 카테고리의 다른 글
Python 내장함수 issubclass(), isinstance(), lambda(), filter(), map(), sorted(), zip() (0) | 2022.06.19 |
---|---|
Python 예외처리 (0) | 2022.06.18 |
Python 모듈, __name__ == '__main__' (0) | 2022.06.13 |
Python 파일 입력, 출력, readline(), readlines(), 한줄씩, 전체 다 (0) | 2022.06.13 |
Python 숫자 나누기 특징 (0) | 2022.06.13 |
댓글