Python/Syntax
2021. 8. 24. 13:58
모듈과 패키지
모듈
비슷한 성격의 변수, 함수들을 파일로 나눠서 정의하는 것이다.
파일명이 모듈명이다.
예제
util.py
INCH = 2.54 def calcsum(n): total = 0 for num in range(n + 1): total += num return total
main.py
import util # from util import * # 비권장 (이름 충돌 우려) print(util.INCH) print(util.calcsum(10)) ''' stdout 2.54 55 '''
모듈 테스트
__name__
키워드는 모듈명으로 대체된다.단독 실행된 경우 : "__main__"
모듈로 사용된 경우 : "모듈명"
이는 모듈 개발 시 테스트하기 편하도록 지원하는 기능이다.
# 모듈 정의 if __name__ == "__main__" : # 모듈 테스트 코드
util.py
INCH = 2.54 def calcsum(n): total = 0 for num in range(n + 1): total += num return total # print("util.py", __name__) # 모듈명 if __name__ == "__main__": print(f"1 inch = {INCH}") print(f"~10 = {calcsum(10)}") ''' stdout 1 inch = 2.54 ~10 = 55 '''
모듈 경로
import
할 때 모듈을 찾는 순서는 다음과 같다.- 워킹 디렉토리
- PYTHONPATH 환경변수에 등록된 디렉토리
- 표준 모듈 디렉토리
- 3rd 모듈 디렉토리
import sys for path in sys.path: print(path)
패키지
- 모듈들을 모아 놓은 디렉토리이다.
__init__
반드시 __init__.py 파일이 존재해야 한다.
일반적으로 내용은 없다.
from 패키지 import *
형식으로 패키지를 호출할 때,__init__.py
의__all__
에 해당하는 리스트만 가져온다.__all__
을 지정하지 않으면 모든 모듈이 불러와진다.이렇게 패키지를 사용하는 것은 일반적이지 않지만, 관례적으로 패키지의 디렉토리에는
__init__.py
파일을 넣는다고 한다.
써드 파티 모듈
모듈의 내부
빌트인 모듈의 목록을 볼 수 있다.
import sys print(sys.builtin_module_names) ''' stdout ('_abc', '_ast', '_codecs', '_collections', '_functools', '_imp', '_io', '_locale', '_operator', '_signal', : ) '''
dir()
함수모듈내 함수 목록을 출력한다.
import math print(dir(math)) ''' stdout ['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', : ] '''
help()
함수함수의 docstring 출력한다.
help(math.hypot) ''' stdout Help on built-in function hypot in module math: hypot(x, y, /) Return the Euclidean distance, sqrt(x*x + y*y). '''
외부 모듈 관리 pip
명령어 설명 install 패키지를 설치 uninstall 설치한 패키지를 삭제한다. freeze 설치한 패키지의 목록을 보여준다. show 패키지의 정보를 보여준다. search pyPI에서 패키지를 검색한다. beautifulsoup 예제
from urllib import request import bs4 target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108") soup = bs4.BeautifulSoup(target) for city in soup.select("location"): name = city.select_one("city").string wf = city.select_one("wf").string tmn = city.select_one("tmn").string tmx = city.select_one("tmx").string print("%s : %s(%s ~ %s)"%(name, wf, tmn, tmx))