Python - 모듈, 패키지.

🛟 Dive.·2024년 3월 3일
0

Python

목록 보기
14/22

모듈과 패키지의 이해.

모듈의 개념.

프로그래밍에서의 모듈은 작은 프로그램 조각을 뜻함. 즉, 하나하나 연결해 어떤 목적을 가진 프로그램을 만드는 작은 프로그램. 각 모듈 역시 저마다 역할이 있고, 서로 다른 모듈과 인터페이스만 연결되면 사용할수 있다.

  • 내장 모듈 - 파이썬에서 기본적으로 제공하는 모듈.
  • random 모듈 - 난수를 쉽게 생성해 주는 모듈.
import random
random.randint(1, 1000)

import 구문 : import 구문은 뒤에 있는 모듈, 즉, random을 사용할 수 있도록 호출하라는 명령어. 다음으로 해당 모듈의 이름을 사용하여 그 모듈 안에 있는 함수, 여기서는 randint() 함수를 사용할 수 있다.

패키지의 개념.

  • 패키지는 모듈의 묶음. 일종의 디렉터리처럼 하나의 패키지 안에 여러 개의 모듈이 있고, 이 모듈들이 서로 포함 관계를 가지며 거대한 패키지를 만든다.

모듈만들기.

모듈 만들기 실습.

  • 간단한 모듈을 만들어 보자. 다음과 같은 코드를 작성하여 ‘fah_converter.py’로 저장.
def convert_c_to_f(celcius_value):
	return celcius_value * 9.0 / 5 + 32
  • 다음으로 해당 모듈을 사용하는 코드.
import fah_converter

print('Enter a celsius value:')
celsius = float(input())
fahrenheit = fah_converter.convert_c_to_f(celsius)
print("that's", fahrenheit, "degrees Fahrenheit.")

네임스페이스.

  • 네임스페이스는 모듈 호출의 범위를 지정.
  • 네임스페이스를 만드는 방법.

방법 1 : 모듈 이름에 알리아스를 생성하여 모듈 안으로 코드를 호출하는 방법. 알리아스는 모듈의 이름을 바꿔 부를 때 사용.

import fah_converter as fah
print(fafh.convert_c_to_f(41.6))

내장 모듈의 사용 : random 모듈.

  • 난수 생성 모듈은 이미 많이 본 random 모듈을 사용하면 된다. 해당 모듈 안에는 여러 가지 함수가 있는 정수 모듈을 생성하는 randint() 함수와 임의의 난수를 생성하는 random() 함수를 쓸 수 있다.
import random
print(random.randint(0, 100))
print(random.random())

내장 모듈의 사용 : time 모듈.

  • 시간과 관련된 time 모듈은 일반적으로 시간을 변경하거나 현재 시각을 출력한다. 대표적으로 프로그램이 동작하는 현재 시각을 출력할 수 있다.
import time
print(time.localtime())

내장 모듈의 사용 : urllib 모듈.

  • 웹과 관련된 urllib 모듈은 웹 주소의 정보를 불러온다. 대표적으로 urllib의 request 모듈을 사용하면 특정 URL의 정보를 불러올 수 있다. urllib.request.urlopen()의 괄호에 특정 웹주소를 입력하면 해당 주소의 HTML 정보를 가져온다.
import urllib.request
response = urllib.request.urlopen('http://theteamlab.io')
print(response.read())

패키지의 구성.

  • 패키지는 하나의 대형 프로젝트를 수행하기 위한 모듈의 묶음. 모듈은 하나의 파일로 이루어져 있고, 패키지는 파일이 포함된 디렉토리로 구성. 즉, 여러 개의 .py 파일이 하나의 디렉토리에 들어가 있는 것을 패키지.
  • 흔히 다른사람이 만든 프로그램을 불러 사용하는 것을 라이브러리라고 하는데, 파이썬에서는 패키지를 하나의 라이브러리로 이해하면 된다.
  • 파이썬의 모듈을 구성할 때와 마찬가지로 패키지에도 예약어가 있다.

패키지 만들기 실습 : 1단계 : 디렉토리 구성.

  • 이번 실습에서 만들 패키지 이름은 ‘roboadvisor’. roboadvisor에는 세 가지 기능이 있다고 가정.
  1. crawling(크롤링) : 주식 관련 데이터를 인터넷에서 가져오는 기능.
  2. database(데이터베이스) : 가져온 데이터를 데이터베이스에 저장하는 기능.
  3. analysis(분석) : 해당 정보를 분석하여 의미 있는 값을 뽑는 기능.

패키지 만들기 실습 : 1단계 : 디렉토리 구성.

  • 패키지를 구성하기 위한 첫 번째 단계는 각 패퍀의지세부세패지패키맞 맞에리디렉구리를성구하는 거것. 먼저 cmd 창에 다음 명령을 입력하여 디렉토리를 생성.

패키지 만들기 실습 : 2단계 : 디렉토리별로 필요한 모듈 만들기.

  • 만들어진 디렉토리에 필요한 모듈을 만든다. 하나의 패키지는 중첩된 구조로 만들 수 있으므로 패키지 안에 또 하나의 패키지가 들어갈 수 있다. 하지만 이렇게 각각의 디렉토리를 하나의 패키지로 선언하기 위해서는 예약된 파일을 만들어야 함. ⇒ **init**.py

패키지 만들기 실습 : 2단계 : 디렉토리별로 필요한 모듈 만들기.

  • 이제 각 하위 패키지에 포함된 모듈에 필요한 기능을 구현하기 위해 코딩을 함.
def series_test():
	print('Seires')
def statics_test():
	print('statics')

패키지 만들기 실습 : 2단계 : 디렉토리별로 필요한 모듈 만들기.

  • 실제 해당 모듈을 사용하기 위해 다음과 같이 파이썬 셀에서 코드를 작성. 이 코드는 roboadvisor의 상위 디렉토리에서 파이썬 셀을 실행해야 정상적으로 진행.
from roboadvisor.analysis import series
series.series_test()

패키지 만들기 실습 : 3단계 : 디렉토리별로init.py 구성.

import analysis
import crawling
import database

__all__ = ['amalysis', 'crawling', 'database']
from.import series
from.import statics

__all__ = ['series', 'statics']

패키지 만들기 실습 : 4단계 : main.py 파일 만들기.

from analysis.series import series_test
from crawling.parser import parser_test

if __name__ == '__main__':
	series_test()
	parser_test()

패키지 만들기 실습 : 5단계 : 실행.

python roboadvisor
series
parser

표준 모듈.

수학 - math

import 명령.

  • 외부의 모듈을 가져와 사용.
    • 필요 기능에 따라 선텍.
  • 파이썬에는 자주 사용하는 기능이 표준 모듈로 함께 설치되어 있음.
    • 표준 라이브러리.
import math

print(math.sqrt(2))

⇒ math모듈에 작성된 모든 상수와 함수를 가져옴.

from 모듈 import 함수명.

모듈의 함수 호출.

from math import sqrt
print(sqrt(2))

⇒ 이 경우 sqrt 외 math에 속한 다른 함수는 사용할 수 없음.

math 모듈.

정밀한 계산을 위한 복잡한 수학 연산 함수.

삼각함수, 제곱근 등 연산 예시.

import math

print(math.sin(math.radians(45)))
print(math.sqrt(2))
print(math.factorial(5))

from 구문.

  • 다양한 함수를 계속해서 입력하는 것의 비효율성.
from 모듈 이름 import 가져오고 싶은 변수 또는 함수.
  • ‘가져오고 싶은 변수 또는 함수’에 여러 개의 변수 또는 함수 입력 가능.
  • 이를 통해 가져온 기능은 math 붙이지 않고도 사용할 수 있음.
from math import sin, cos, tan, floor, ceil
sin(1)
cos(1)
tan(1)
floor(2.5)
ceil(2.5)

as 구문.

  • 모듈의 이름이 너무 길어 짧게 줄여 사용하고 싶은 경우.
import 모듈 as 사용하고 싶은 식별자
import math as m
m.sin(1)
m.cos(1)
m.tan(1)
m.floor(2.5)
m.ceil(2.5)

time 모듈.

  • 날짜와 시간 관련 기능 제공.
  • 에폭 /유닉스 시간
import time
print(time.time())
  • 일상 시간 뮨자열으로 변환 가능.
import time
t = time.time()
print(time.ctime(t))

보다 편리한 형태로 조립하려면.

  • localtime 함수.
    • 지역 시간 고려하여 현지 시간 구함.
    • 시간 요소 멤버로 가지는 strut_time형 객체 반환.
    • 정보 분리하여 문자열로 조립.

실행 시간 측정.

time 함수 호출하는 시점에 따라 구해지는 시간이 다름을 이용.

두 지점 간의 경과 시간 측정.

import time

start = time.time()
for a in range(1000):
	print(a)
end = time.time()
print(end - start)
  • 소수점 이하 값까지 지정 가능.

calender 모듈.

  • 달력기능.
  • 인수로 받은 연도의 달력 객체 반환.

month 함수.

  • 연도와 달을 인수로 받아 해당 월 달력 객체 반환.

weekday 함수.

  • 특정 날짜가 어떤 요일인지 조사.
import calender

print(calendar.calendar(2018))
print(calendar.month(2019, 1))

random 모듈.

  • 난수 생성 기능.
  • 어떤 수가 나올 지 예측할 수 없는 무작휘 동작 구현.
import random

for i in range(5):
	print(random.random())

randint(negin, end)

  • 일정 범위의 정수 난수 범위 설정.
import random

for i in range(5):
	print(random.randint(1, 10))
  • randrange(begin, end)
    • end는 범위에서 제외
  • choice 함수.
    • 리스트에서 임의의 요소 하나 골라 반환.

shuffle 함수.

  • 리스트의 요소 무작위로 섞음.
import random

food = ['짜장면', '짬뽕', '탕수육', '군만두']
print(food)
random.shuffle(food)
print(food)

sys 모듈.

  • 파이썬 해석기가 실행되는 환경과 해석기의 여러 기능 조회 및 관리.

명령행 인수.

파이썬에서 실행 파일 뒤에 인수를 전달할 수 있음.

copy a.txt b.txt

a.txt/b.txt

  • 명령행 인수.
  • 명령 수행할 대상이나 옵션 지정.
import sys
print(sys.argv)

os 모듈.

  • 운영체제 와 관련된 기능 가진 모듈.
  • 새로운 폴더 만들거나 폴더 내부 파일 목록 보는 등.
import os

print('현재 운영체제:', os.name)
print('현재 폴더:',os.getcwd())
print('현재 폴더 내부의 요소:',os.listdir())

os.mkdir('hello')
os.rmdir('hello')

with open('original.txt','w') as file:
file.write('hello')
os.rename('original.txt','new.txt')

os.remove('new.txt')

os.system('dir')

datetime 모듈.

  • datetime 모듈.
    • date(날짜) 및 time(시간)과 관련된 모듈.
import datetime

print('# 현재 시각 출력하기')
now = datatime.datetime.now()
print(now.year, '년')
print(now.year, '월')
print(now.day, '일')
print(now.hour, '시')
print(now.minute, '분')
print(now.second, '초')
print()

urllib 모듈.

  • url 다루는 라이브러리.
from urllib import request

target = request.urlopen('http://google.com')
output = target.read()

print(output)

⇒ urlopen() 함수 : URL 주소의 페이지 열기.

연습.

  1. 모듈을 호출할때 사용하는 에일리어스(alias)의 개념에 대해 설명해 보고 예제를 만들어 보세요.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
  1. ‘calculator_input.py’는 사칙연산 프로그램이다. 다음 빈칸을 채워 프로그램을 완성하고 실행해 보세요.
from claculator_input.calculator import *

user_input = input("사칙연산 프로그램: ").split(" ")
first_val , second_val = int(user_input [0]), int(user_input [2])
fourcal = user_input[1]

if fourcal == "+":
    result = sum_func(first_val , second_val)

elif fourcal == "-":
    result = minus_func(first_val , second_val)

elif fourcal == "/":
    result =devide_func(first_val , second_val)

else:
    result =multiply_func(first_val , second_val)

print("실행 결과는", result)
profile
Data Science. DevOps.

0개의 댓글