[Python] 패키지

Jungmin Seo·2021년 5월 25일
0

🍔 패키지(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

1. 패키지 안의 함수 실행하기

  • echo 모듈 import
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
  • echo 모듈이 있는 디렉터리까지 from ... import
>>> from game.sound import echo
>>> echo.echo_test()
  • echo 모듈의 echo_test 함수를 직접 import
>>> 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는 반드시 모듈 혹은 패키지


2. __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 가능 모듈을 정의

3. relative 패키지

🍔 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)

profile
Hello World!

0개의 댓글

관련 채용 정보