일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Retry
- session 유지
- tensorflow text
- 공분산
- subdag
- 상관관계
- top_k
- API Gateway
- spark udf
- login crawling
- XAI
- BigQuery
- airflow subdag
- requests
- grad-cam
- flask
- 유튜브 API
- TensorFlow
- gather_nd
- integrated gradient
- GenericGBQException
- GCP
- correlation
- UDF
- youtube data
- chatGPT
- hadoop
- Airflow
- Counterfactual Explanations
- API
- Today
- Total
데이터과학 삼학년
모듈, 패키지 개념 정리 (if __name__=='__main__': 쓰는 이유) 본문
모듈과 패키지 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
'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 |