우와한 개발자

[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

  • 인터프리터가 모듈을 검색할 경로 목록
    1. 실행 스크립트가 있는 디렉토리
    2. PYTHONPATH 환경변수에 지정한 디렉토리
    3. 파이썬 표준 라이브러리 경로 (예: 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 시에는 실행되지 않음

 

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기