데이터과학 삼학년

모듈, 패키지 개념 정리 (if __name__=='__main__': 쓰는 이유) 본문

Python

모듈, 패키지 개념 정리 (if __name__=='__main__': 쓰는 이유)

Dan-k 2020. 3. 23. 05:52
반응형

모듈과 패키지 import를 통해서 불러와 쓰는 것인데.
이 두가지의 차이가 무엇인지 알아보고,
모듈을 개발할때 if __name___ =='__main__': 을 쓰는 이유에 대해 알아본다.


모듈(module)은 각종 변수, 함수, 클래스를 담고 있는 파일이고,
패키지(package)는 여러 모듈을 묶은 것입니다.

파이썬을 설치할 때 다양한 모듈과 패키지가 기본으로 설치됩니다.
만약 기본 모듈과 패키지로 부족하다면 다른 사람이 만든 유명 모듈과 패키지를 설치해서 쓸 수도 있습니다.

참고 | 모듈, 패키지, 라이브러리
파이썬을 배우다 보면 모듈, 패키지, 파이썬 표준 라이브러리와 같은 용어를 접하게 되는데 서로 비슷한 개념이지만 약간의 차이가 있습니다.
모듈: 특정 기능을 .py 파일 단위로 작성한 것입니다.
패키지: 특정 기능과 관련된 여러 모듈을 묶은 것입니다. 패키지는 모듈에 네임스페이스(namespace, 이름공간)를 제공합니다.
파이썬 표준 라이브러리: 파이썬에 기본으로 설치된 모듈과 패키지, 내장 함수를 묶어서 파이썬 표준 라이브러리(Python Standard Library, PSL)라 부릅니다.


즉 모듈과 패키지를 정리하면 패키지는 묶음이다.
다만 python. 3.3 버전이하에서 패키지 폴더를 만들때 해당 폴더가 패키지임을 명시하기 위해 __init__.py 파일을 해당 폴더에 생성해야한다.
패키지안에 모듈을 불러와 쓰는 방법은 아래와 같다.

  • import 패키지.모듈
  • import 패키지.모듈1, 패키지.모듈2
  • 패키지.모듈.변수
  • 패키지.모듈.함수()
  • 패키지.모듈.클래스()
import urllib.request
response = urllib.request.urlopen('http://www.google.co.kr')
response.status
200
참고 | 가져온 모듈 해제하기, 다시 가져오기
import로 가져온 모듈(변수, 함수, 클래스)은 del로 해제할 수 있습니다.
>>> import math
>>> del math
모듈을 다시 가져오려면 importlib.reload를 사용합니다.
>>> import importlib
>>> import math
>>> importlib.reload(math)


그렇다면 if __name__=='__main__' 을 쓰는 이유에 대해 알아보면

if __name__ == '__main__':
	코드~

아래와 같이 main.py 에서 hello 라는 모듈을 임포트를 해올 경우,

import hello

hello.hi()
'안녕하세요'

파이썬에서 import로 모듈을 가져오면 해당 스크립트 파일이 한 번 실행됩니다. 따라서 hello 모듈을 가져오면 hello.py 안의 코드가 실행됩니다.
이때 __name__이라는 변수에는 hello를 임포트해오기 때문에
hello.py의 __name__ 변수에는 'hello'가 들어가고, main.py의 __name__ 변수에는 '__main__'이 들어갑니다.

파이썬의 경우, import를 해올때 import 해오는 모듈을 모두 실행하기 때문에 원치않는 코드가 실행될 수 있는 경우가 있다.
내가 시작하는 시작점(entry point) 이 어떤 파일인지를 명확히 하고 의도대로 코드를 실행시키기 위해 if __name__=='__main__': 이라는 조건을 달아 해당 스크립트 파일을 실행시킨다.

파이썬은 최초로 시작하는 스크립트 파일과 모듈의 차이가 없습니다. 어떤 스크립트 파일이든 시작점도 될 수 있고, 모듈도 될 수 있습니다. 그래서 __name__ 변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단합니다.
if __name__ == '__main__':처럼 __name__ 변수의 값이 '__main__'인지 확인하는 코드는 현재 스크립트 파일이 프로그램의 시작점이 맞는지 판단하는 작업입니다. 즉, 스크립트 파일이 메인 프로그램으로 사용될 때와 모듈로 사용될 때를 구분하기 위한 용도입니다.

참고 | 파이썬은 왜 프로그램의 시작점이 정해져 있지 않나요?
파이썬이 처음에 개발 될 당시에는 리눅스/유닉스에서 사용하는 스크립트 언어 기반이었기 때문에 프로그램의 시작점이 따로 정해져 있지 않았습니다. 보통 리눅스/유닉스의 스크립트 파일은 파일 한 개로 이루어진 경우가 많은데, 이 스크립트 파일 자체가 하나의 프로그램이다 보니 시작점이 따로 필요하지 않습니다.

하지만 C 언어나 자바같은 언어는 처음 만들어질 때부터 소스 파일을 여러 개 사용했기 때문에 여러 소스 파일의 함수들 중에서도 시작 함수(main)를 따로 정해 놓았습니다.


출처 : https://dojang.io/mod/page/view.php?id=2448

파이썬 코딩 도장: 45.2 모듈과 시작점 알아보기

인터넷에 있는 파이썬 코드를 보다 보면 if __name__ == '__main__':으로 시작하는 부분을 자주 만나게 됩니다. if __name__ == '__main__':     코드 도대체 이 코드는 왜 사용하는 것일까요? 이 코드는 현재 스크립트 파일이 실행되는 상태를 파악하기 위해 사용합니다. 먼저 __name__부터 알아보겠습니다. 다음 내용을 프로젝트 폴더(C:\project) 안에 hello.py 파일로 저장하세요. hello.py pri

dojang.io

728x90
반응형
LIST

'Python' 카테고리의 다른 글

문자열 포맷팅 (% operator, str.format, f-string)  (0) 2020.04.02
property (getter, setter)  (0) 2020.03.23
OS 모듈 정리  (0) 2020.03.02
Decorator (데커레이터)  (0) 2020.01.26
Closer (클로저)  (0) 2020.01.12
Comments