🍔 패키지(Packages): 파이썬 모듈을 계층적(디렉터리 구조)으로 관리
** 가상의 game 패키지 예
game/
__init__.py
sound/
__init__.py
echo.py
wav.py
graphic/
__init__.py
screen.py
render.py
play/
__init__.py
run.py
test.py
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
>>> from game.sound import echo
>>> echo.echo_test()
>>> from game.sound.echo import echo_test
>>> echo_test()
import 방법이 틀린 경우
# 1 >> import game >> game.sound.echo.echo_test() # 2 >> import game.sound.echo.echo_test
#1
-game 디렉터리의 모듈 또는 game 디렉터리의__init__.py
에 정의된 것만 참조
-game 뒤에 sound 디렉터리가 남아서 X
#2
-import a.b.c처럼 import 할 때, 가장 마지막 항목인 c는 반드시 모듈 혹은 패키지
__init__.py
🍔 __init__.py
파일이 해당 디렉터리가 패키지의 일부임을 알려줌
디렉터리에 __init__.py
파일이 없다면 패키지로 인식X
** python3.3 버전부터는 __init__.py
파일이 없어도 패키지로 인식
# 정상작동
>>> from game.sound.echo import * # from 마지막 항목이 모듈인 경우
>>> echo.echo_test()
# 오류
>>> from game.sound import *
>>> echo.echo_test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'echo' is not defined
# 오류 수정하려면?
# C:/doit/game/sound/__init__.py
__all__ = ['echo']
# *를 사용하여 모듈을 import할 때에는,
# 해당 디렉터리의 __init__.py 파일에 __all__ 변수 설정 후 import 가능 모듈을 정의
🍔 graphic 디렉터리의 모듈이 sound 디렉터리의 모듈을 사용하고 싶다면?
>>> from game.sound.echo import echo_test
>>> render_test()
# relative하게 import하기
>>> from ..sound.echo import echo_test
>>> render_test()
🍕 relative 접근자
..
부모 디렉터리.
현재 디렉터리
** 인터프리터에서 사용 불가
아래 내용을 바탕으로 정리한 것이다.
점프투파이썬 (https://wikidocs.net/1418)