Python - 모듈
<모듈>
: 파이썬 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 하는 것
- 하나의 파이선 .py 파일이 하나의 모듈
- 모듈의 종류
· 표준 모듈
· 사용자 정의모듈
· 외부 모듈(3rd Party)
- 모듈의 호출 방법: import 모듈명 으로 모듈을 가져올 수 있음
· as(alias)를 활용해 긴 모듈명을 줄일 수 있음
· 하나의 새로운 이름 공간을 확보하며 정의됨
· 'from 모듈 import 함수1, 함수2 ...' 로 모듈 내 특정 함수만 가져올 수 있음
<모듈의 장점>
- 중복된 코드의 재작성을 줄일 수 있음: 필요 시 호출하여 사용
- 전체 코드를 관련된 모듈들로 분리하여 설계: 구조적 프로그래밍 가능
- 별도의 이름공간을 제공: 동일한 이름의 여러 함수나 변수들을 모듈마다 정의 가능
<함수와 모듈의 차이>
- 함수: 파일 내에서 특정한 동작을 수행하는 코드를 독립된 단위로 작성 (같은 파일 내 같은 이름공간)
- 모듈: 파일 단위로 코드들을 묶어 사용(단 독립된 단위의 코드를 말함)
· 비슷하거나 관련된 일을 하는 함수 등의 코드를 하나의 파일에 저장하고 추후 사용하는 단위
<모듈의 검색 경로(파이썬이 모듈을 검색하는 순서)>
1. 이미 메모리에 로딩된 모듈
2. 현재 디렉토리에 있는 .py 파일
3. 환경변수(PYTHONPATH)에 등록된 경로에 있는 파일들
4. 표준 모듈 목록
<표준 모듈>
: 파이썬은 기본적으로 많은 표준 라이브러리 모듈을 제공하고 있음
- 파이썬에서 제공되는 모듈 목록 확인: https://docs.pytho n.org/3/pymodindex.html
- 현재 사용할 수 있는(설치된) 모듈의 목록 확인: help(“modules”) 명령어 사용
- Anaconda로 파이썬을 설치한 경우: Anaconda 폴더 내 lib 폴더에 모듈 직접 확인 가능 해당 파일을 직접 찾아서 해당 모듈의 내용을 수정할 수 있지만, 권장하지 않음!
- 표준 모듈의 종류
· os 모듈: 운영체제와 상호작용하기 위한 수십가지 함수 제공
· time 모듈: 시간과 관련된 여러 함수 제공
· random 모듈: 다양한 랜덤 관련 함수 제공
· math 모듈: 수학적으로 복잡한 연산이 필요한 경우, 수학과 관련된 함수 제공
· calendar 모듈: 달력과 관련된 여러 함수 제공
- 모듈의 활용법
· 필요한 기능에 대한 인터넷 검색
· help(“모듈명”)으로 모듈에 대한 설명 확인
· 모듈 import 후 모듈명 . + Tab키로 활용 가능한 모듈 확인
· 해당 모듈 위에 커서를 두고 Shift + Tab키로 모듈의 설명 확인
<사용자 정의 모듈 만들기>
- 파이썬의 모듈 검색 경로에 파이썬 파일 생성
cf) 주로 현재 프로그램이 실행되는 곳과 같은 경로에 생성
- Jupyter Notebook 환경의 경우 같은 경로에 .py 파일로 코드 작성
cf) Text File로 생성 후 파일명 변경
<사용자 정의 모듈 사용하기>
- import 생성한 모듈명
cf) Jupyter Notebook의 경우 오류 발생 시 커널 재시작
- import: 단순 코드를 가져오는 것이 아닌 가져온 코드를 실행하는 것, print가 실행되는 것을 확인
- 동일한 변수도 다른 모듈에서 가져와 재정의 가능
< __name__ 활용>
: 모듈의 이름이 저장되는 변수, 현재 모듈이 최상위 모듈로 수행되는지 여부 확인 가능
- __main__을 출력하면 해당 파일이 가장 먼저 실행되는 최상위 모듈
- 사용자 정의 모듈에 name이 main일 때의 조건문을 적어 테스트 코드로 사용 가능: 해당 조건문 내 코드는 test.py가 최상위 모듈로 사용될 때만 실행(모듈로 활용될 때는 무시)
<외부 모듈>
- 공개 소스 라이센스 계약에 따라 개발한 소프트웨어를 다른 사용자가 사용 가능
- 파이썬 : 널리 사용되는 개방형 소스 개발 프로젝트, 파이썬은 비영리 재단이 관리하는 오픈 소스로, 다양한 단체와 커뮤니티에서 활발하게 관련 모듈을 만들고 배포하고 있음
- 다양한 사용자층과 커뮤니티가 활성화되어 있음
- 대표적으로 파이썬 패키지 인덱스(PyPI)로 불리는 라이브러리 저장소 관리 기구가 있음
- 4차 산업혁명 관련 IT 분야에서 파이썬의 중요성이 높아지고 있는 이유: 파이썬이 해당 분야의 프로그래밍에 도움되는 외부 모듈을 다양하게 제공하기 때문
<외부 모듈 설치하기>
: 대표적으로 PyPI 공식 기구에서 관리하는 모듈은 PIP라는 패키지 관리자 명령어로 손쉽게 설치할 수 있음
1. 패키지 관리자 사용하기(PIP)
cf) 파이썬 3.4 이후 버전은 기본적으로 pip를 포함하고 있으며, 손쉽게 외부 모듈을 설치할 수 있음
2. 콘솔창에서 pip install 패키지명 한 줄로 외부 모듈 설치 가능
3. Jupyter Notebook 환경에서 명령어 앞 !를 붙여 설치 가능: !pip install 패키지명
- 느낌표(!)를 붙이면 콘솔창에서 입력하는 것과 같은 역할
- 삭제는 pip uninstall 모듈명
4. Anaconda를 설치했다면, Anaconda Navigator에서 설치 가능
- 환경을 달리 정의할 수 있고, 환경마다 패키지(외부 모듈)를 설치할 수 있음
5. 일반 사용자들이 개발한 모듈도 사용 가능
- 사용자 정의 모듈과 같은 방법으로, git 등의 경로에서 다운 받은 파일을 로컬 경로에 저장
<외부 모듈로 데이터 베이스 연결하기>
: pymysql 모듈을 활용해 MySQL 데이터베이스와 연결해 데이터를 관리할 수 있음
1. 데이터 베이스 연결하기
- pymysql: MySQL을 파이썬에서 사용할 수 있는 모듈 중 하나
- pip install pymysql로 설치
- MySQL 설치 (https://dev.mysql.com/downloads/mysql/)
cf) 전 세계에서 가장 많이 사용되는 오픈 소스 관계형 데이터베이스
2. 데이터베이스 서버 환경
- test db에 test 테이블 생성
- 직접도 가능
· 스키마 생성 코드(Mysql에 붙여 넣어 실행) CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */;
· 테이블 생성 코드(Mysql에 붙여 넣어 실행)
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(500) CHARACTER SET utf8 DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`enable` varchar(45) DEFAULT '0',
PRIMARY KEY (`id`) )
ENGINE=InnoDB DEFAULT CHARSET=latin1;
3. 모듈 import, 연결 정보 정의 (서버 주소, 포트번호, 아이디, 비밀번호)
4. 데이터 가져오기
ex) "SELECT * FROM test.test"
5. 데이터 입력하기
ex) "INSERT INTO test (name, age, enable) VALUES (%s, %s, %s);"
<외부 모듈로 웹 크롤링>
: BeautifulSoup 모듈을 활용해 웹 크롤링을 HTML 태그 단위로 보다 손쉽게 할 수 있음
- 웹 크롤링: 컴퓨터 소프트웨어 기술로 웹 사이트들에서 원하는 정보를 추출하는 것
· 파이썬에서 웹 크롤링을 지원하는 대표 라이브러리 BeautifulSoup 설치: pip install beautifulsoup4로 설치
ex) 포털 사이트 급상승 검색어 가져오기 import urllib.request import bs4 web_page = urllib.request.urlopen("https://www.naver.com") result = bs4.BeautifulSoup(web_page, "html.parser") rank = result.find("ul",class_="ah_l") for i in rank.find_all("li"): print(i.get_text("위 : ", strip=True)) 1. urllib 모듈로 웹 페이지 가져오기 - urllib: 파이썬에서 웹과 관련된 작업을 도와주는 모듈 - 데이터를 가져오는 역할을 하는 urllib 중 request 모듈을 활용해 포털 사이트의 메인 페이지 정보를 가져옴 2. BeautifulSoup 모듈로 웹 페이지 분석 - 텍스트화된 웹 페이지는 BeautifulSoup 모듈을 활용하면 HTML 태그 단위로 분석 가능 3. 급상승 검색어 부분의 패턴 찾기 (브라우저의 페이지 소스보기) 4. 필요한 정보만 가공하여 마무리 - 반복문과 HTML 내 텍스트만 가져오는 get_text 함수를 활용해 검색어만 추출 |