모듈은 함수나 변수, 클래스를 모아놓은 파일이다. 우리는 파이썬 프로그래밍을 할 때 이미 많들어 놓은 다양한 모듈들을 사용할 수 있고, 직접 모듈을 만들어 사용할 수도 있다.
모듈 만드는 법
우리가 저장한 py확장자의 파이썬 파일은 모두 모듈이다.
모듈 불러와 사용하는 법
모듈울 현재 프로젝트 디렉토리나 기본 라이브러리가 있는 디렉토리로 옮기고 import
명령어를 사용해 불러온다.
import mod # 모듈 전체 임포트
""" mod.method 형식이 아닌 method 이름만 사용하고 싶은 경우 """
from mod import method1, method2 # 모듈에서 해당 메소드(변수, 클래스) 임포트
from mod import * # 모듈의 전체 메소드, 변수, 클래스 임포트
if __name__ == "__main__":
의 사용
직접 파일을 실행했을 경우 참이되어 다음 문장들을 실행한다. 대화형 인터프리터나 다른 파일에서 이 모듈을 불러 사용할 경우에는 거짓이되어 다음 문장들이 실행되지 않는다.
즉, 임포트 시에 파이썬 파일이 실행되는 문제를 방지하려고 다음 조건문을 사용하는 것이다.
<aside>
💡 __name__
변수
파이썬 내부적으로 사용하는 변수 이름이다.
C:\\>python mod.py
와 같이 직접 파일을 실행하는 경우 __name__
변수는 __main__
값이 저장된다.
하지만 인터프리터나 다른 파이썬 프로그램에서 모듈을 임포트 하는 경우 __name__
변수에는 모듈의 이름인 ‘mod’
가 저장된다.
</aside>
패키지는 도트연산자 .
를 사용하여 관련된 파이썬 모듈들을 계층적으로 관리하게 해준다.
패키지 만드는 법
예를 들어 computer 패키지를 만든다고 가정하고
computer 폴더 안에 __init__.py
와 monitor, desktop, printer 디렉토리가 있고
__init__.py
, panel.py
, size.py
__init__.py
, cpu.py
, gpu.py
__init__.py
, toner.py
, paper.py
라는 모듈들이 각각 디렉토리에 있다고 해보자.
<aside>
💡 __init__.py
은 무엇?
해당 디렉토리가 패키지의 일부임을 알려주는 역할을 한다. 즉, 디렉토리를 패키지로 인식시키기 위해서 __init__.py
가 포함된다.
3.3 버전부터는 __init__.py
가 없어도 패키지로 인식되지만, 하위 버전의 호환성을 위해 사용하는 것이 좋다.
""" from 패키지 디렉토리 import *(전부) 를 했을 경우 """
__all__ = ['모듈명'] # __init__.py의 내부에 다음과 같이 정의된 모듈만 임포트된다.
</aside>
패키지 사용 방법
위에서 예를 든 computer패키지에 computer/monitor/panel.py
모듈이 panel_method()
메소드를 가지고 있다면, 다음 3가지 방법으로 이 메소드를 사용할 수 있다.
""" import [module]"""
import computer.monitor.panel
computer.monitor.panel.panel_method()
""" from...import [module] """
from computer.monitor import panel
""" from...import [method] """
from computer.monitor.panel import panel_method
panel_method()
relative 패키지
만약 패키지 내부의 어떤 디렉토리의 모듈이 다른 디렉토리의 모듈의 메소드를 사용할 때 전체 경로를 사용하여 임포트한다면 다음과 같이 변경하여 사용할 수 있다.
# cpu.py
from computer.monitor.panel import panel_method
def cpu_method(): # cpu.py의 메소드 cpu_method에서 panel.py의 메소드 echo_test 사용
echo_test()
하지만 전체 경로를 사용하여 임포트하지 않고 다음과 같이 상대적으로 임포트도 가능하다.
# cpu.py
from ..monitor.panel import panel_method
def cpu_method(): # cpu.py의 메소드 cpu_method에서 panel.py의 메소드 echo_test 사용
echo_test()
..
은 cpu.py파일의 부모 디렉토리인 computer 디렉토리를 의미한다. 여기서 .
은 현재 디렉토리를 의미함을 알 수 있다.