Written by
DK-Lite
on
on
Tennis Package 만들기
파이썬 패키지는 파이썬 모듈들의 집합체
라 할수 있다. 여기서 모듈
은 하나의 파이썬 파일
이다.
우리는 앞서 개발한 테니스 프로젝트를 패키지화
시키고자 한다.
init.py 역할
파이썬에서 특정 디렉토리를 import
할때 가장 먼저 실행되는 파일이다.
여기서 패키지 내부에 있는 모듈을 뭉쳐주는 역할
을 한다.
디렉터리
아래는 tennis 패키지의 폴더 구조
이다.
tennis/
├─ data
│ └─ court_reference.png
│ └─ drawed_court.png
├─ __init__.py
├─ detectors.py
├─ geomath.py
├─ reference.py
├─ dataclasses.py
├─ trakcer.py
...
모듈 생성
몇 가지 모듈의 구조를 만들어보자
# tennis/traker.py
__all__ = ['TennisBallTracking', 'Trace' ]
from . import dataclasses
class TennisBallTracking:
...
class Trace:
...
# tennis/detector.py
__all__ = ['TennisCourtDetection', 'detect' ]
import cv2 as cv
import numpy as np
from . import tracker
from . import reference
from . import dataclasses
class TennisCourtDetection:
tracking = tracker.TennisBallTracking()
...
def detect(a, b):
pass
위 파이썬 파일처럼 __all__
함수에 외부에서 사용할 수 있는 클래스나 함수를 등록해두면 된다.
모듈에서 다른 모듈을 호출할때는 from . import dataclasses
와 같은 형식으로 작성하면 좋다.
init.py 작성
모듈을 위와 같이 작성하였다면 __init__.py
는 아래와 같은 형식으로 작성한다.
# tennis/__init__.py
from .detectors import *
from .tracker import *
from .dataclasses import *
__all__ = (
detectors.__all__ +
tracker.__all__ +
dataclasses.__all__
)
import
이제 tennis 패키지 외부에서 호출하여 사용
해보자
# main.py
import tennis
def main():
tracking = tennis.TennisBallTracking()
detect = tennis.TennisCourtDetection()
trace = tennis.Trace()
...