한양과학기술고등학교

에듀테크 프로젝트 대시보드

모듈 · 패키지 · import

import __name__ package __init__.py

.py 파일 하나가 모듈, 모듈을 담은 폴더가 패키지입니다.

1. import 형태

import math
math.sqrt(16)

import numpy as np                  # 별칭
from math import sqrt, pi           # 이름 직접 가져오기
from math import sqrt as sq
from collections import *           # 전부 (권장 안 함 — 이름 충돌)

from . import sibling               # 상대 임포트 (패키지 내부)
from ..pkg import thing

2. __name__ == "__main__"

# mymodule.py
def main():
    print("실행")

if __name__ == "__main__":
    main()          # 이 파일을 직접 실행할 때만 (import 시엔 안 돌아감)

# python mymodule.py  → __name__ == "__main__"
# import mymodule     → __name__ == "mymodule"

3. 패키지 구조

myapp/
├── __init__.py        # 패키지임을 표시 (비어 있어도 됨)
├── core.py
├── utils/
│   ├── __init__.py
│   └── text.py
└── __main__.py        # python -m myapp 로 실행되는 진입점

# 사용
from myapp.core import run
from myapp.utils.text import slugify

4. 모듈 탐색 경로

import sys
sys.path            # import 가 뒤지는 디렉터리 목록
#   1) 현재 스크립트 폴더  2) PYTHONPATH  3) 표준 라이브러리  4) site-packages

# 모듈 정보
math.__file__       # 파일 위치
dir(math)           # 노출된 이름들
import importlib
importlib.reload(mymodule)   # 개발 중 다시 로드
순환 임포트 주의
  • A 가 B 를, B 가 A 를 import → ImportError 또는 부분 초기화
  • 함수 안에서 지연 import 하거나, 공통 코드를 제3 모듈로 분리

5. 표준 라이브러리 지도

분야모듈
파일·경로pathlib, os, shutil, glob
데이터json, csv, sqlite3, pickle
날짜·시간datetime, time, zoneinfo
수학·난수math, random, statistics, decimal
텍스트re, string, textwrap
함수형itertools, functools, operator
동시성threading, multiprocessing, asyncio, concurrent.futures
네트워크urllib, http, socket
개발logging, argparse, unittest, dataclasses, typing

6. __all__

# mymodule.py
__all__ = ["public_func", "PublicClass"]   # from mymodule import * 대상 제한

def public_func(): ...
def _private(): ...        # * 로 안 딸려옴
"단순함이 복잡함보다 낫다 (Simple is better than complex)"