46.6 연습문제: 하위 패키지 구성하기

다음 소스 코드를 완성하여 from database import * 형식으로 패키지를 사용할 수 있게 만드세요. 여기서는 database 패키지 안에 sqlite 패키지가 들어있습니다.

database/__init__.py

                           

database/sqlite/__init__.py

# 내용이 비어 있음

database/sqlite/dbapi.py

def connect(database):
    print(database)

practice_package.py

from database import *
 
connect(':memory:')

실행 결과

:memmory:

정답

from .sqlite.dbapi import *

해설

from database import *으로 패키지의 모든 변수, 함수, 클래스를 가져온 뒤 connect(':memory:')와 같이 패키지, 모듈 이름 없이 함수 그대로 사용하고 있습니다. 이렇게 동작하려면 패키지의 __init__.py 파일에서 from import로 함수를 가져와야 합니다.

여기서는 database 패키지 안에 sqlite 패키지가 들어있고, sqlite 패키지의 dbapi 모듈에 들어있는 connect 함수를 사용하고 있습니다. 따라서 database/__init__.py 파일에서는 from .sqlite.dbapi import *와 같이 현재 패키지(.)에서 하위 패키지 sqlite에 들어있는 dbapi 모듈의 모든 변수, 함수, 클래스를 가져오도록 만들면 됩니다.