패키지

매일 공부(ML)·2021년 11월 10일
0

Python

목록 보기
6/38

패키지

  • 정의: 도트(.)을 사용하여 파이썬 모듈을 계층적으로 관리

  • 예시: 모듈이름이 A.B라서 A는 패키지 이름, B는 A패키지의 B모듈

  • 구조: 디렉토리와 파이썬 모듈

*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
  • 디렉토리: game(루트 디렉터리), sound, graphic, play(서브 디렉터리)
  • 파이썬 모듈: .py

패키지 만들기

패키지 기본 구성 요소 준비

  1. C:doit 디렉토리 밑에 game 및 기타 서브 디렉터리 생성 후 .py파일 만들기
C:/doit/game/__init__.py
C:/doit/game/sound/__init__.py
C:/doit/game/sound/echo.py
C:/doit/game/graphic/__init__.py
C:/doit/game/graphic/render.py
  1. 각 디렉터리에 init.py파일 만든 후 내용 비우기

  2. echo.py파일 만들기

def echo_test():
    print("echo")
  1. render.py파일 만들기
def render_test():
    print("render")
  1. game패키지 참조하기
  • set 명령어로 PYTHONPATH 환경 변수이용

  • C:/doit디렉터리 추가

  • 파이썬 인터프리터 실행

C:\> set PYTHONPATH=C:/doit
C:\> python

패키지 안의 함수 실행

패키지 안의함수 실행 방법

  • 하나를 실행한 후 다음 실행하기 위해선 인터프리터 종료 후 다시 실행(ctrl+z)

  • import할 때 가장 마지막 항목은 모듈 또는 패키지어야한다.

  1. 모듈 import한다.
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
echo
  1. 모듈에 있는 디렉토리까지 실행
>>> from game.sound import echo
>>> echo.echo_test()
echo
  1. echo_test함수를 직접 import
>>> from game.sound.echo import echo_test
>>> echo_test()
echo

init.py의 용도

  • init.py: 해당 디렉터리가 패키지의 일부임을 알려주는 역할

  • 모듈 정의 방식

# C:/doit/game/sound/__init__.py
__all__ = ['echo']

>>> from game.sound import *
>>> echo.echo_test()
echo
  • all: sound디렉터로에서 * 기호 사용하여 import 경우, echo모듈만 import
  • from game.sound.echo import * : all과 상관없이 무조건 import

relative 패키지

  • 하나의 디렉토리 안에 있는 모듈이 다른 디렉토리의 모듈을 사용하는 법

  • from game.sound.echo import echo_test을 이용하여 문장을 추가하고 echo_test함수 사용하도록 수정

i) 일반적인 방식

from game.sound.echo import echo_test
def render_test():
    print("render")
    echo_test()
    
>>> from game.graphic.render import render_test
>>> render_test()
render
echo

ii) relative 방식

  • from ..sound.echo import echo_test

  • ..: 부모 디렉터리 의미

  • . : 현재 디렉터리

from ..sound.echo import echo_test

def render_test():
    print("render")
    echo_test()
profile
성장을 도울 아카이빙 블로그

0개의 댓글