파이썬 module

윤태영·2023년 11월 19일
0
post-thumbnail

이미지 출처: https://wikidocs.net/192339

이번 시간에는 파이썬 모듈에 대해 알아보겠습니다.
모듈의 기본 개념은 우리는 지금까지 코딩할 때 하나의 파일 안에 함수들을 정의했습니다. 경우에 따라 클래스들도 있습니다. 연관관계가 있는 변수, 함수, 클래스 이런 것들을 모아놓은 어떤 파일을 모듈이라고 합니다. 이 파일을 타인이 쓰기도 하며 다른 사람의 모듈을 쓰기도 한다. 함수, 변수 클래스 등 파이썬 구성 요소 등을 모아놓은 파일이라고 생각하시면 됩니다. 나중에 배우겠지만 이런 모듈들이 합쳐지면 패키지가 됩니다.🙂

아래와 같이 math는 파이썬에서 제공하는 표준 라이브러리 중 하나인 모듈입니다. 저희도 모듈을 만들면 저런식으로 다른사람이 사용할 수 있겠죠.

import math
math.pi
>>> 3.1415926535...

파이썬 모듈 📕

  • module : 함수, 변수, 클래스 등 파이썬 구성 요소 등을 모아놓은 파일

간단하게 사칙연산을 함수로 만들어 보고 그걸 다른 파일에서 사용해보겠습니다.

def add(x, y):
    return x + y
def subtract(x, y):
    return x - y
def multply(x, y):
    return x * y
def divide(x, y):
    return x / y
def power(x, y):
    return x ** y
print('-' * 15)
# 함수 바로 밑에서 호출이니 내부에서 호출
print('called! inner') 
print(add(5,5))
print(subtract(15,5))
print(multply(5,5))
print(divide(10,2))
print(power(5,3))
print('-' * 15)
>>>
---------------
called! inner
10
10
25
5.0
125
---------------

만약에 우리가 다른 파일을 만들고 그 파일에서 사칙 연산이 필요한 부분이 있다면, 그때 다시 add 함수를 만들고, subtract 함수를 만드는 것은 생산성이 떨어지고 비효율적입니다. 그때 위의 코드들을 모듈로 등록해서 다른 파일에서 갖다 쓸 수 있다면 얼마든지 재사용할 수 있습니다.💻

다른 파일을 하나 만들고 우리가 만든 파일을 import 해보겠습니다.

기존 파일 : chapter06_02.py
새로만든 파일 : module_test.py

모듈 사용 실습 📕

  • sys.path에 우리가 공부하고 잇는 경로를 등록해주거나, 파일을 따른곳에 옮겨놓고 등록하면 사용 가능
  • 파이썬이 여기에 설치 되어있고, 모듈과 패키지들은 거기 어디에 있는지 알켜주는 것이 sys의 path속성으로 알 수 있다.
import sys
print(sys.path)
>>> 
# sys안에 있기때문에 import로 우리가 만든 것을 가져다가 사용가능하다.
['C:\\Users\\yount\\Desktop\\Python +', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\DLLs', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages']

모둘 경로 삽입 📕

chapter06_02.py 파일을 다른 곳에다가 옮기고 테스트해 보겠습니다. 물론 지금까지 공부한 파일들이 있는 경로로 등록하면 전부 다 검색되겠지만 저희는 다른 곳에 옮겨서 경로를 넣고 테스트해 보겠습니다.

저는 math라는 새로운 폴더를 생성하고 그안에 헷갈리지 않게 module_test 파일명을 바꿔서 test_module 파일로 넣겠습니다. 경로는 'C:/math' 입니다. 여러분도 임의로 폴더를 생성하시면 됩니다. 이 경로를 sys에 등록하고 import하면 저희가 만들어 놓은 함수들을 가져다 사용 가능하겠죠!

아래 파일은 module_test.py에서 작성중입니다.

import sys
print(type(sys.path))
# 리스트에 데이터를 추가할때는 append, insert 또는 인덱스 번호로 직접 수정 가능합니다. 저는 append 메소드로 맨마지막에 추가해보겠습니다.
>>> <class 'list>
# sys.path.append는 영구적으로 되는 것이아니라 코드상에서만 되는것 영구적으로 하기 위해서는 구글에서 파이썬 패스에 영구적등록해야한다.
sys.path.append('C:/math')
print(sys.path)
>>> 
# 끝 부분에 math가 추가 되었습니다.
['C:\\Users\\yount\\Desktop\\Python +', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\DLLs', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311', 'C:\\Users\\yount\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages', 'C:/math'] 

이제 모듈을 불러와 봅시다.
실행해 보니 아까 06_02에 만들어 놓았던 print 코드가 자동으로 실행됩니다. 하지만 이 내용이 실행되면 안 됩니다. 우리가 사용하기 전에 갑자기 이 안에 있는 모든 내용을 불러오기 때문에, print문이 자동으로 실행이 된 겁니다. 이걸 방지하는 것은 조금 있다 다시 알아봅시다. 🙄

import test_module 
>>>
---------------
called! inner
10
10
25
5.0
125
---------------

test_module에 있는 함수를 사용해봅시다.

# 10의 세제곱은 1000
print(test_module.power(10,3))
>>> 1000

정상적으로 함수가 잘 불러오는 게 보입니다. 그러면 06_02로 다시 돌아가서 print문이 호출되지 않게 해봅시다. print문은 주석 처리하거나 없애야 출력이 되지 않겠죠? 파이썬에서는 다른 곳에서 외부적으로 이 파일을 임포트할 경우와 자기 자신을 스스로 실행할 경우를 구분하는 예약어가 있습니다. 이를 알아봅시다. 그리고 sys.path에 python_basic이란 경로가 추가되어 있을 겁니다. 같은 폴더에 있는 파일을 모두 import 할 수 있다는 의미인데요 없다면 추가해 주시길 바랍니다.('C:\python_basic')

import chapter_06_02
>>>
---------------
called! inner
10
10
25
5.0
125
---------------

name 사용 📕

06_02에서 작성중

이제 06_02파일을 불러올때 불필요하게 실행되는 print문을 name이라는 키워드로 설정해보겠습니다.

  • __name__ 사용
  • 만약에 내가 실행하는 위치가 다른데서 import해서 chapter06_02.py 호출할때는 그 실행하는 파일은 모듈 테스트를 실행한것이다.
  • name 이 main인경우에 print문을 메인이라고 지정해주자.
# print문은 주석처리해준다.
# print('-' * 15)
# print('called! inner') 
# print(add(5,5))
# print(subtract(15,5))
# print(multply(5,5))
# print(divide(10,2))
# print(power(5,3))
# print('-' * 15)
# 내 자신을 실행할 경우 밑의 구문이 실행되는것이고, 아닌경우에는 실행x
if __name__ == "__main__":
    print('-' * 15)
    print('called! __main__') 
    print(add(5,5))
    print(subtract(15,5))
    print(multply(5,5))
    print(divide(10,2))
    print(power(5,3))
    print('-' * 15)

다시 module_test로 돌아가서 실행해봅시다.
이제는 아무것도 실행되지 않습니다.
이말은 다른 파일에서 chapter_06_02를 호출할 때는 그 실행하는 파일은 name이 main이 아니라는 말입니다. 만약 chater_06_02에서 실행하면 실행이 되겠죠!
여러분이 어떤 모듈을 만들고 코드 아래에

if name == 'main' 이렇게 쓰고 아래에서 테스트를 하는것입니다. 다른 사람들이 참고할 만한 코드들을 작성해 놓으면, 사용자 입장에 이 모듈 파일은 어디에 있는지 찾아볼 것입니다. 그렇게 코드들을 보면서 테스트로 실행해 볼 코드로 main에 작성되있는 코드들을 실행해 볼 것입니다.

import chapter06_02
>>> 

main은 내자신을 바로 실행할 경우에는 main 아래 코드가 실행되고 아닐 경우에는 실행되지 않습니다. 간단한 내용이지만 파이썬의 원리를 알아야 하기에 내용이 길어졌습니다. 잘 만들어진 오픈소스들을 보면 이해를 돕기 위해 메인 영역을 따로 만들어 놓습니다. 다음 시간에는 패키지를 알아보겠습니다. 😙

출처 : 인프런

profile
ice blue

0개의 댓글