Module
- 기능의 집합
- 변수나 함수, 클래스 등을 모아놓은 파일
모듈 사용의 장점
- 다른 파일에서 재사용 가능
- 파일이 너무 클 때 여러 파일로 나누어서 정리 할 수 있음
Module 만들기
- python 파일을 만들기
- 그 파일 안에 사용하고 싶은 함수/ 클래스 등을 정의하기
- 위의 과정으로 만든 파일 --> 하나의 모듈이 됨
import
모듈을 불러오기 위해 사용하는 키워드
사용방법 : import 모듈이름
이 때 파이썬 파일의 import 모듈이름.py과 같이 사용하면 안됨
예시) module 이름 --> math / 포함된 함수 이름 --> sqrt()
import math
print (math.sqrt(9))
# 3.0
from ~ import
모듈 내에서 사용 할 몇 개의 함수/클래스/변수만 import 하기위해 사용하는 키워드
사용방법 : from 모듈이름 import 함수/클래스/변수이름1, 함수/클래스/변수이름2
from ~ import *
모듈에 있는 모든 요소가 import됨
사용방법 : from 모듈이름 import *
아래와 같이 사용
from math import *
print (sqrt(9))
# 3.0
local scope를 가지고 있는 다른 요소들과 이름 충돌이 발생할 수 있으므로 권장하지는 않음
import module vs from module import *
- 둘 다 모듈내의 모든 요소를 사용할 수 있음
- 차이점
- import module은 사용시 모듈이름.함수이름으로 사용해야함 ex) math.sqrt(9)
- from module import * 은 사용시 함수이름만 써서 사용 ex) sqrt(9)
import As
모듈또는 모듈의 요소에 새로운 이름을 주어서 사용하는 것
모듈/요소의 이름이 너무 길거나 동일한 이름의 함수가 있을시 유용함
모듈에서 사용방법 : import 모듈이름 as 바꿀이름
import my_module as m1
m1.my_module_func()
요소에서 사용방법 : from 모듈이름 import 요소이름 as 바꿀이름
from module import my_func as f1
from module2 import my_func as f2
from module3 import function_with_name_too_long as f3
f1()
f2()
f3()
Packages
- 파이썬 파일로 이루어져있는 directory가 하나의 package가 됨
- directory의 이름이 곧 package의 이름이 됨

위의 이미지에서 pkg가 디렉토리 mod1, mod2가 모듈
import 패키지명.모듈명
import pkg.mod1
from pkg.mod2 import func3
pkg.mod1.func2()
func3()
Package Initialization
패키지 안에 아래의 이미지와 같이 __init__.py
파일이 있는 경우 패키지 초기설정이 가능

패키지가 import될 때 __init__.py
파일의 코드가 자동으로 실행됨
초기설정 예시
1. import 할 때 경로 길이 줄이기
예시 ) pkg에서 mod1의 func2 라는 함수를 import 하기
__init__.py
을 사용하지 않은 경우
# new_python_file.py
import pkg.mod1
pkg.mod1.func2() # 함수 사용시 긴 경로를 입력해야함
위의 예시와 같이 함수를 입력할 때 긴 경로를 입력해야 함
__init__.py
을 사용한 경우
__init__.py
파일에 아래의 내용 입력
# __init__.py
from .mod1 import func # from .모듈 import 함수/클래스
패키지를 실행하면 위의 내용이 자동으로 실행됨
# new_python_file.py
from pkg import func2 # from 패키지 import 모듈
func2()
위의 예시와 같이 함수 사용시 경로를 줄일 수 있음
2. Package에서 import 할 수 있는 변수/함수/클래스 제한
package 외부에서 import되는 함수를 제한할 수 있음
(package의 내부에서만 사용 되어야하는 함수 등의 사용을 제한 가능)
이는 *__all__
* 변수를 이용하여 정의가능
__all__
변수 default 값 : 모든 함수/ 변수/ 클래스 등__all__
변수를 따로 정의해주어서 import될 수 있는 요소 제한하기
예시 )
__init__.py
파일에 아래의 내용 입력
# __init__.py
from .mod1 import func2
from .mod2 import func3
__all__ = ['func2', 'func3']
패키지를 실행하면 위의 내용이 자동으로 실행됨
# new_python_file.py
from pkg import *
func2()
func3()
func4() ## <== Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음
3. package가 import될 때 먼저 실행되어야 하는 코드 설정 등
다른 사람의 package 사용하기
다른 사람이 만든 package를 import하려면 먼저 package를 설치 해야함
사용방법 : pip
터미널에서 pip install package명
python의 import search 방식
import 모듈/패키지를 실행했을 때 python은 해당 디렉토리를 search 함
search 순서
import시 아래의 장소를 순서대로 찾음
- sys.modules
- built-in modules
- sys.path
sys.modules
- 파이썬이 import하는 모듈/패키지를 찾기위해 가장 먼저 확인하는 곳
- sys.modules는 단순한 dictionary
- 이미 import된 모듈과 package들을 저장하고 있음
- 새로 import 하는 모듈은 sys.modules 에서 찾을 수 없음
built-in modules
- 파이썬에서 제공하는 파이썬 공식 라이브러리
- 파이썬에 포함되어 나오기때문에 파이썬이 쉽게 찾을 수 있음
sys.path
- 파이썬이 import하는 모듈/패키지를 찾기위해 마지막으로 확인하는 곳
- string 요소들을 가지고 있는 list
- string 요소들은 경로를 나타냄
- list의 경로를 확인하며 해당 경로에 import할 모듈/패키지가 있는지 확인
sys module
sys는 파이썬의 built-in modules
아래과 같이 사용할 수 있음
import sys
print(sys.modules) # dictionary로 반환
print(sys.path) # list로 반환
-
print(sys.modules)의 결과
-
print(sys.path)의 결과


위의 세 곳에서 원하는 모듈/패키지를 찾지 못하면 ModuleNotFoundError 에러를 리턴
Absolute Path & Relative Path
Absolute Path
절대 경로 - import를 하는 파일이나 경로에 상관없이 경로가 동일
최상위 디렉토리부터 시작해 하위 디렉토리를 탐색하는 방식
단점 - 경로가 길어질 수 있음
Relative Path
상대 경로 - import 하는 위치를 기준으로 경로를 정의 (현재 작업 위치에 대한 상대 경로)
dot(.)은 파일의 현재 위치를 의미
dot 2개(..) 는 현재위치에서 상위 디렉토리로 가는 경로
예시)
from . import class1
from .subpackage1.module5 import function2
from ..module4 import class4
장점 - 경로의 길이를 줄여줌
단점 - 헷갈리기 쉽고 파일 위치가 변경되면 경로 위치도 변경되어야 함
'python > Today I Learned' 카테고리의 다른 글
Class (2) | 2020.03.31 |
---|---|
Closure & Decorator (1) | 2020.03.30 |
Scope (1) | 2020.03.30 |
Set (1) | 2020.03.26 |
CSS (0) | 2020.03.24 |
댓글