모듈을 만드는 이유
모듈의 뜻은 함수나 변수 또는 클래스 등을 모아놓은 파이썬 파일을 뜻한다. 프로그래밍 격언 중에 이런 말이 있다.
바퀴를 다시 발명하지 마라.(개구리가 말한 건 아님)
이런 말처럼 여러 가지를 구현해 낼 수 있는 함수들은 이미 세상에 많다. 우리는 이걸 가져다가 지금껏 아마 많이 써왔을 것이다. 아래 사진처럼 콘솔에 pip list를 이용해 내가 현재 설치한 모듈을 확인해 볼 수 있다.
이 외에도 설치할 수 있는 모듈은 엄청 많다.
대체 사람들은 어떻게 이렇게 남들이 쓸 수 있게 올려놓은 것일까? 굉장히 궁금하다. 우리는 이걸 그대로 경험해 보기 위해 모듈을 직접 만들어서 배포해 볼 것이다.
모듈의 제작방법을 ARABOZA.
1. 폴더구조를 맞추자
project/
package/
__init__.py
module.py
README.txt
setup.py
위 사진이 기본 폴더구조이다. 이는 항상 맞춰줘야 한다. 폴더이름이 하는 역할은 아래와 같다.
project - 모듈을 배포하기 위해 대표하는 이름(우리가 pip install [project]로 가져오는 것이다.)
package - 패키지 또는 모듈화 했을 경우의 이름(우리가 from [package] import ~~ 로 가져온다.)
대체로 project파일명과 package파일명은 같게 한다.
module.py - 패키지일 경우 내부 모듈로써 가져올 수 있는 이름(우리가 from [package] import [module.py]인 개념)
모듈화를 진행한다면 이 이름은 크게 중요하지 않다.
이름으로 써 동작하는 것들에 대해서는 대략적인 마무리를 지었다. 아래는 예시사진이다.
2. 모듈을 제작해 보자
나는 과거 이중 for문으로 고통받았던 기억이 있는 별 찍기를 쉽게 할 수 있는 모듈을 만들어서 배포해 보겠다.
# module.py
def starpix(star_index, updown="up"):
if updown == "up":
i = 0
while i <= star_index:
print("*"*i)
i += 1
elif updown == "down":
i = 0
miner_idx = star_index
while i <= star_index:
print("*"*miner_idx)
miner_idx -= 1
i += 1
기본값은 피라미드 형식으로 제작했고 설정값을 넣으면 역순으로도 할 수 있게 만들었다.
# __init_.py
from .module import *
init 파일에는 위와 같이 설정하며 모듈 이름을 넣음으로 써 패키지가 아닌 단순 모듈로 동작하게 해 준다.
아래 작업을 하기 전 먼저 설치해 줄 것이 필요하다.
pip install setuptools
# setup.py
from setuptools import setup, find_packages
setup(
name ='pystarpix', # 패키지 이름(소문자 영어)
version = '1.0.0', # 버전(버전 업뎃후 재 배포시 숫자를 올려줘야한다.)
description = 'very good', # 설명
author = 'None', # 본인의 이름(자유롭게)
author_email = None, # 본인의 이메일
url = None, # 깃허브 링크나 홍보링크(뭐 안적어도 된다)
install_requires = [], # 모듈을 제작할 때 사용된 패키지를 같이깔아준다.
packages=find_packages(), # 패키지를 찾는 코드(꼭 넣어준다)
)
setup.py파일은 배포에 관련된 정보를 적는 파일로 위에처럼 세팅해 주고 설명에 맡게 커스텀해준다.
위 적은 내용은 다 적는 걸 추천한다.(몇 개 뺐다가 오류로 한동한 고생함)
이로써 모든 모듈을 제작하였다. 다음 편으로 배포 편으로 찾아오겠다.
다음엔 더 좋은 글로 cheers~