[Python] 모듈(module) - import 방법, sys.path, __name__
by 우와한개발자
1. 모듈이란?
- 파이썬 코드를 작성한 .py 파일
- 표준 라이브러리 : 파이썬 설치 시 기본으로 내장된 모듈
- string, date, time, math, random, os, sys, sqlite3 등 200여 개 존재
2.모듈 import
- import 구문을 통해 모듈을 메모리에 로드
- 모듈명 = 파일명 (확장자 제외)
1) import
- 모듈 내 함수 사용 시 모듈명.함수명 으로 호출
import time
time.ctime() # ✅ 정상
ctime() # ❌ NameError
2) import A as B
- 모듈에 별칭 부여
import 패키지명 as 패키지별칭
import 모듈명 as 모듈별칭
import time as t
t.ctime()
3) from A import B
- 특정 함수/모듈만 가져올 때, 모듈명 없이 함수명만으로 사용 가능
from 패키지명 import 모듈명
from 모듈명 import 함수명
from time import ctime
ctime()
4) from A import B as C
- 가져온 함수/모듈에 별칭 부여
from 패키지명 import 모듈명 as 모듈 별칭
from 모듈명 import 함수명 as 함수 별칭
from time import ctime as ct
ct()
5) * 를 이용한 전체 모듈 import
- 모듈 안에 정의된 모든 함수, 변수, 클래스를 한 번에 가져옴
- 서로 다른 모듈에서 같은 이름의 함수/변수가 있을 경우 나중에 import한 것이 덮어써지는 충돌 위험이 있어 사용 지양
from time import *
ctime()
6) dir(모둘명) 함수 : 모듈 요소 목록 확인
- 모듈내 정의한 이름?을 정렬된 문자열로 반환
import math
print(dir(maht))
# ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos',
'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign',
'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs',
'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot',
'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log',
'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin',
'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
3. 모듈 재로드 / 해제
1) 모듈 재로드 - 모듈 수정 후 재시작 없이 반영할 때
- 모듈을 변경하는 경우 인터프리터를 재시작해야함.(=커널 재시작)
- 특정 모듈만 다시 import하는경우엔 importlib.reload(모듈명)사용
import importlib
importlib.reload(모듈명)
2) 모듈 해제
- del 모듈명 은 모듈을 메모리에서 완전히 내리는 것이 아니라, 현재 네임스페이스에서 해당 이름만 제거하는 것
- 네임스페이스(namespace) : 이름(변수명, 함수명 등)과 객체를 연결해서 저장하는 공간
- 삭제 후 해당 모듈 호출 시 NameError 발생
del 모듈명
4. 모듈 경로 (sys.path)
1) import 동작 순서
- 모듈 import 시 인터프리터가 내장 모듈을 검색하고 없으면 sys.path 변수에 지정된 디렉토리 목룍에서 검색
모듈 import
↓
내장 모듈 검색
↓
sys.path 디렉토리 목록에서 검색
2) sys.path
- 인터프리터가 모듈을 검색할 경로 목록
- 실행 스크립트가 있는 디렉토리
- PYTHONPATH 환경변수에 지정한 디렉토리
- 파이썬 표준 라이브러리 경로 (예: C:\Python3\Lib)
import sys
print(sys.path) # 경로 목록 출력
# 경로 추가
sys.path.append("경로")
sys.path.insert(0, "경로") # 우선순위 높게 추가
# 경로 제거
sys.path.remove("경로")
3) sys.argv
- 터미널 실행 시 전달된 인수 리스트
# 터미널
python fibo.py 100 # sys.argv = ['fibo.py', '100']
python fibo.py # sys.argv = ['fibo.py']
5. 모듈 실행
1) 터미널에서 직접 실행
python my_module.py
python my_module.py 100 # 인수 전달
2) __name__ == "__main__"
- 모듈을 import 하면 해당 파일의 모든 코드가 실행됨
- if __name __== "__main__" 으로 감싸면 직접 실행할 때만 동작하도록 제한 가능
def func():
print("hello")
if __name__ == "__main__":
func() # 직접 실행할 때만 동작
# import 시에는 실행되지 않음
'언어 > Python' 카테고리의 다른 글
| [Python] 클래스(class)와 객체(object) - 구조, 네임스페이스, self (0) | 2026.04.19 |
|---|---|
| [Python] 패키지(package)와 pyc 파일 - __init__.py, __pycache__ 폴더 (0) | 2026.04.19 |
| [Python] 내장함수 - import 없이 사용하는 함수 모음 (0) | 2026.04.16 |
| [Python] 람다식(lambda)과 타입 힌트(Type Hint) - 익명 함수와 자료형 명시 (0) | 2026.04.16 |
| [Python] 함수 매개변수 - 기본값, *args, **kwargs, 순서 규칙 (0) | 2026.04.16 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자