노트

파이썬 모듈과 패키지

Python Modules and Packages

CS#python · 연결된 개념 5개

쉽게 말하면

파이썬 모듈은 공구가 든 서랍 하나이고, 패키지는 그 서랍들을 모은 공구함이에요. 필요한 공구만 import로 꺼내 쓰니 코드를 파일로 쪼개 두고 여러 곳에서 다시 쓸 수 있어요.

비유가 깨지는 곳 공구와 달리 모듈은 처음 import될 때 한 번 실행되고 캐시돼요. 직접 실행할 때만 돌 코드는 __name__ 검사 아래에 두고, 내 파일 이름을 json.py처럼 지으면 표준 모듈 대신 내 파일이 import돼요.

파이썬에서 .py 파일 하나가 모듈(module)이고, 모듈을 모은 디렉터리가 패키지(package)다. import는 다른 모듈의 변수·함수·클래스에 접근할 수 있게 해 주고, 모듈은 처음 import될 때 한 번만 실행된 뒤 캐시된다(sys.modules).

import json
import numpy as np
from pathlib import Path
from .models import Movie        # 패키지 안 상대 import

모듈을 찾는 순서

  1. 내장 모듈
  2. sys.path의 디렉터리를 차례로: 실행한 스크립트의 디렉터리, PYTHONPATH 환경변수, 설치된 라이브러리(site-packages)

내 파일 이름을 json.py, random.py처럼 표준 모듈과 같게 지으면 표준 모듈 대신 내 파일이 import된다.

메인 모듈과 __name__

파이썬에는 main 함수가 따로 없다. 직접 실행한 파일이 메인 모듈이 되고 그 모듈의 __name__은 "__main__"이다. import된 모듈의 __name__은 모듈 이름이다.

def main(): ...
 
if __name__ == "__main__":       # 직접 실행할 때만
    main()

이렇게 두면 import할 때는 실행되지 않아 테스트나 재사용이 쉽다.

패키지

  • 디렉터리에 __init__.py가 있으면 일반 패키지다. 파이썬 3.3부터는 없어도 네임스페이스 패키지(namespace package)로 import되지만, 명시적으로 두는 편이 혼란이 적다
  • __init__.py는 보통 비워 두거나 공개 API를 다시 내보내는 데 쓴다. __all__은 from pkg import *가 가져올 이름 목록이다
  • import *는 어떤 이름이 들어오는지 코드만 봐서는 알 수 없어 피한다

서드파티 모듈

pip로 PyPI(Python Package Index)에서 설치하고, 프로젝트마다 가상환경(virtual environment, python -m venv .venv → source .venv/bin/activate)으로 의존성을 분리한다(환경변수 스코프와 source). 요즘은 uv 같은 더 빠른 도구도 많이 쓴다(2026 기준).

공개 API를 한 곳에서 다시 내보내는 방식은 자바스크립트의 배럴 파일과 re-export과, 모듈 시스템 자체는 ES 모듈과 CommonJS와 비교해 보면 좋다. 이름이 어디서 오는지는 파이썬 스코프 (LEGB)를 본다.

출처: Python 튜토리얼: Modules · Module Search Path · Executing modules as scripts · Packages

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 파이썬 클래스 기초

    파이썬 클래스는 데이터 속성(attribute)과 메서드를 묶은 타입이고, 클래스를 호출해 인스턴스(instance)를 만든다. 메서드의 첫 매개변수 self가 호출한 인스턴스 자신이며, 호출할 때는 파이썬이 자동으로 채워 넘긴다.

  • 파이썬 기본 컬렉션

    파이썬의 기본 컬렉션은 리스트·튜플·딕셔너리·셋 네 가지다. 가장 중요한 구분은 변경 가능 여부(mutable·immutable)와 순서·중복을 어떻게 다루는가다.

  • *args·**kwargs와 언패킹

    *args는 남는 위치 인자(positional argument)를 튜플로, **kwargs는 남는 키워드 인자(keyword argument)를 딕셔너리로 모아 받는 문법이다. 반대로 호출할 때 *·**를 쓰면 시퀀스·딕셔너리를 개별 인자로 펼친다. 모으는 것을 패킹(packing), 펼치는 것을 언패킹(unpacking)이라 한다.

  • 파이썬의 선 (PEP 20)

    팀 피터스가 정리한 파이썬 설계 철학 19줄. 명시성, 단순함, 가독성을 앞세운다.

  • 가변 기본 인자 함정

    파이썬 함수의 기본값은 함수를 정의할 때 한 번 평가되어 그 객체가 계속 재사용된다. 그래서 리스트·딕셔너리 같은 변경 가능한 객체를 기본값으로 쓰면, 호출할 때마다 같은 객체가 공유되어 값이 쌓인다.

보기 옵션