**모듈(module)**은 하나의 .py 파일이고, **패키지(package)**는 모듈들의 디렉터리입니다. import는 다른 모듈의 코드를 사용할 수 있게 하여 프로그램을 재사용 가능한 조각으로 구성합니다.
모듈과 import
python
# math_utils.py — 하나의 모듈
def add(): a + b
PI =
# main.py — 다양한 import 방식
import math_utils # 모듈 전체를 import
math_utils.add(2, 3) # 모듈 이름을 통해 접근
from math_utils import add, PI # 특정 이름을 import
add(2, 3) # 직접 사용
from math_utils import add as plus # 별칭으로 import
import numpy as np # 일반적인 별칭 관례
mypackage/
__init__.py ← 패키지로 표시함 (비어 있어도 됨)
module_a.py
subpackage/
__init__.py
module_b.py
from mypackage.module_a import something
from mypackage.subpackage.module_b import other
__init__.py 파일은 디렉터리를 패키지로 표시합니다(그리고 패키지 초기화 코드를 실행하거나 from package import *가 노출하는 것을 정의할 수 있습니다).
if __name__ == "__main__" 관용구def main():
print("running as a script")
if __name__ == "__main__": # 직접 실행할 때만 True, import할 때는 아님
main()
이것은 파일이 import 가능한 모듈인 동시에 실행 가능한 스크립트로 동작할 수 있게 합니다 — 그 아래의 코드는 파일이 직접 실행될 때(python file.py)만 실행되고 import될 때는 실행되지 않습니다. 거의 보편적인 Python 관용구입니다.
import sys
sys.path # Python이 import를 위해 검색하는 디렉터리 목록
# 포함: 현재 디렉터리, 설치된 패키지(site-packages), 표준 라이브러리
import os, json, datetime # 표준 라이브러리 — "배터리 포함"
import requests # 서드파티 — PyPI에서 pip로 설치
모듈과 패키지는 Python 코드를 하나의 거대한 파일이 아니라 재사용 가능하고 유지보수 가능한 단위로 구성하는 방법입니다 — 사소하지 않은 모든 프로젝트에 기본적입니다.
import 스타일, 패키지 구조(__init__.py), if __name__ == "__main__" 관용구(스크립트/모듈 이중 동작), 그리고 Python이 모듈을 찾는 방법(sys.path)을 이해하는 것은 프로젝트를 구성하고, 코드를 재사용하고, 방대한 표준 라이브러리와 PyPI 생태계를 사용하는 데 필수적입니다.
import 오류와 구조 혼란은 이 지식이 해결해 주는 흔한 초기 장애물입니다.