파이썬 모듈

파이썬 모듈

파이썬 파일 하나는 곧 '모듈'이에요. 코드가 커지면 여러 파일로 나눠 재사용하고 싶어지는데, 모듈이 바로 그 단위가 되어 줘요. 여러 모듈을 점 표기 경로로 묶으면 '패키지'가 되고, 이 구조 덕분에 이름 충돌 걱정 없이 다른 사람이 만든 코드를 가져다 쓸 수 있어요. 파일 하나로 시작해 패키지까지, 코드를 나누고 조직화하는 방법을 차근차근 볼게요.

출처: 6. Modules — Python 공식 튜토리얼

모듈이란 무엇인가

모듈은 파이썬 정의와 문장을 담은 파일이에요. 파일 이름에 확장자 .py를 붙인 이름이 곧 모듈 이름이 되고, 모듈 안에서는 자신의 이름을 전역 변수 __name__으로 확인할 수 있어요. 정의된 함수·클래스·변수는 import로 다른 파일에서 가져다 쓸 수 있답니다.

한 번만 import되면 다시 불러오지 않으므로, import 문장은 관례상 파일 맨 위에 한 번에 모아 두는 게 보기 좋아요.

모듈 검색 경로와 sys.path

import검색 경로(search path) 를 따라 모듈을 찾아요. 이 경로는 sys.path라는 문자열 목록에 들어 있고, PYTHONPATH 환경변수나 내장 기본값에서 초기화돼요. 실행하는 스크립트가 있는 디렉터리는 검색 경로의 맨 앞에 놓여서, 같은 이름의 표준 라이브러리 모듈보다 먼저 로드돼요.

import sys
sys.path.append('/my/own/modules')

보통은 그대로 쓰면 되지만, 직접 만든 모듈이 다른 위치에 있으면 sys.path를 목록 연산으로 바꿔 줄 수 있어요. 이처럼 모듈이 로드되는 기준을 이해하면 "왜 내 모듈을 못 찾지?" 같은 헤맴을 줄일 수 있어요.

표준 모듈과 내장 모듈

파이썬은 언어와 함께 거대한 표준 라이브러리를 제공해요. 그중 일부 모듈은 인터프리터 자체에 내장(built-in)되어 있어요. dir()help()는 큰 모듈을 탐색할 때 좋은 도우미예요. dir(모듈)은 모듈이 가진 이름 목록을, help(모듈)은 docstring으로 만든 매뉴얼을 보여줘요.

패키지(package)

여러 모듈을 구조적으로 묶고 싶을 때는 패키지를 만들어요. 패키지는 점 표기 모듈 이름을 쓰는 방식으로, A.B는 패키지 A 안의 하위 모듈 B를 가리켜요. 파일 시스템상으로는 디렉터리 하나가 패키지 하나에 대응하고, 관례적으로 __init__.py 파일을 그 디렉터리에 넣어 "이건 패키지다"를 알려줘요.

sound/                        # 최상위 패키지
    __init__.py
    effects/                  # 하위 패키지
        __init__.py
        echo.py
        reverse.py

패키지 안 모듈을 가져올 때는 전체 이름을 쓸 수도, from으로 축약할 수도 있어요.

import sound.effects.echo
sound.effects.echo.echofilter(input, output)

from sound.effects import echo
echo.echofilter(input, output)

from package import item에서 item은 하위 모듈일 수도 있고 패키지에 정의된 함수·클래스·변수일 수도 있어요. 한편 from package import *는 기본적으로 그 패키지의 __all__ 목록을 따라 가져올 이름을 정해줘요.

__all__ = ["echo", "surround", "reverse"]

이렇게 하면 from sound.effects import *__all__에 적힌 세 모듈만 가져와요. 파이썬 3.3부터는 __init__.py 없이도 동작하는 '네임스페이스 패키지'라는 고급 기능도 있지만, 구조적 구분이 필요할 때는 __init__.py를 두는 기본 방식이 가장 무난해요.

더 알아보기