Module:: 변수, 함수, class 등을 모아놓은 파일
코드를 분리하고 공유할 수 있도록 만들어주는 문법
다른 파일에서 재사용이 가능하게 하기 위함
전체 코드가 한 파일에 넣기 너무 커졌을 때 여러 파일로 나누어 정리하기 위함
ex) len()
my_list = [1, 2, 3, 4, 5]
my_list_length = len(my_list)
print(my_list_length)
이미 만들어놓은 모듈
을 사용할 수도,직접 만들어서
사용할 수도 있음## my_module.py
my_module_var = 7
def my_module_func():
return "Hello!"
class MyModuleClass:
pass
import
키워드를 사용하여 불러와서 사용import <모듈 이름>
import my_module
📌::: 모듈을 import
할 때 파일 확장자인 .py
는 제외하고 파일 이름만을 사용!!!
<모듈 이름>.<모듈에서 사용하길 원하는 변수/함수/클래스 이름>
my_module.my_module_func()
정리하면,
## main.py import my_module print(my_module.my_module_var) my_module.my_module_func() my_module_class = my_module.MyModuleClass()
from ... import ...
from <모듈 이름> import <함수/변수/클래스1>, <함수/변수/클래스2>, ..., <함수/변수/클래스N>
from my_module import my_module_func, my_module_var
print(my_module_var)
my_module_func()
*
(모듈의 모든 요소 import)from my_module import *
print(my_module_var)
my_module_func()
하지만, 권장되는 방법은 아님
local scope를 가지고 있는 다른 변수/함수/클래스와 이름 충돌이 생기는 경우 알기가 쉽지 않을 수 있음
import as
키워드를 통해 새로운 이름을 부여
- 여러 모듈을 import하는 경우 이름충돌이 발생할 수 있음
- 혹은 원하는 모듈의 요소 이름이 너무 긴 경우
from my_module import my_func as f1
from my_module2 import my_func as f2
from my_module3 import function_with_name_too_long as f3
f1()
f2()
f3()
<<module 이름도 as를 통하여 새로운 이름 부여 가능>>
import my_module as m1
m1.my_module_func()
Module을 디렉토리
형식으로 구조화
도트(.
,(dot notation)를 사용해서 파이썬 모듈을 디렉터리 구조로 관리
import pkg.mod1
from pkg.mod2 import func2
pkg.mod1.func2()
func2()
::: __init__
__init__.py
용도
해당 디렉터리가 패키지의 일부임을 알려주는 역할
import할 때 경로의 총 길이 줄여줌
package에서 import할 수 있는 변수/함수/클래슷 제한
그 외 package가 import될 때 꼭 먼저 실행되어야 하는 코드
만약 여러 이름의 패키지에 포함된 디렉터리에 __init.py__
파일이 없다면 패키지로 인식 X
📌 ::: 패키지 안에 각 디렉토리에는 반드시 __init__.py
가 존재해야함
📌 ::: __init__.py
파일은 비어있을 수 있고, 패키지 내 포함된 모듈들의 정보를 제공
※ python3.3 버전부터는 __init__.py
파일이 없어도 패키지로 인식한다(PEP 420). 하지만 하위 버전 호환을 위해 __init__.py
파일을 생성하는 것이 안전한 방법이다.
::: Examples
🎯 ::: import할 때 경로의 총 길이 줄여주는 예제
import pkg.mod1
pkg.mod1.func2()
⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣⇣
# __init__.py
from .mod1 import func2
# main.py
from pkg import func2
func2()
<<매번 모든 경로를 입력해야 하는 대신 __init__.py를 통해 경로를 줄여줌>
🎯 ::: import할 수 있는 변수/함수/클래스 제한
__all__
변수를 지정__all__
통해 정의__all__
의 default값은 모든 함수/변수/클래스__all__
변수를 정의해 줌으로써 import될 수 있는 요소를 제한# __init__.py
from .mod1 import func2
from .mod2 import func3
__all__ = ['func2', 'func3']
# main.py
from pkg import *
func2()
func3()
func4() ## <== Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음.
pip
툴 사용, pip
는 파이썬의 package managerpip install Django
https://losskatsu.github.io/programming/function-module-package/#2-%EB%AA%A8%EB%93%88