3 min read

[Python] 엑셀 라이브러리 수정 및 배포

pip install -U excel-convertor

데이터를 통해 엑셀 파일을 생성하는 라이브러를 배포했다. 위 라이브러리는 dictionary 으로부터 엑셀 파일을 생성할 수 있도록 도와주는 라이브러리이다. 배포하기까지 어떤 과정이 있었는지 회고해보려 한다.

개요

파이썬에서 엑셀 생성하는 패키지는 대표적으로 xlsxwriter 가 있다. 이를 활용하면 여러 기능을 제공할 수 있다. 이를 테면, 메모 추가 나 헤더에 필터 추가 등이 있다. 업무하면서 엑셀 파일을 요청하는 경우가 종종 있다. 나는 이 패키지를 활용하여 좀 더 쉽게 엑셀을 생성할 수 있도록 하고 싶었다.

과정

xlsxwriter 의 예제는 cell 당 입력하는 예제가 많이 보였다. 25 개의 cell 이 있다면 25 줄을 모두 입력해야 하는 상황이 생긴다. 비슷한 코드가 반복되면 이후 수정하는 데 복잡함이 붙는다. 행을 추가하거나 열을 추가하는 때 말이다. 그래서 나는 미리 데이터를 정리한 후, 정리한 데이터를 기반으로 엑셀을 생성하도록 그림을 그렸다.

최종적으로 gpt 도 활용한 끝에 아래와 같은 코드를 만들어낼 수 있었다. 헤더를 미리 정의한 후, 반복문을 통해 body 를 구하여 저장하는 코드이다. 필요에 따라서 cell style 을 지정할 수 있도록 했다.

with ExcelConvertor(save_to="test") as convertor:
    convertor.header = {"이름": "이름", "휴대폰": "휴 대 폰", "가입일": "가입일"}
    convertor.cell_styles = {"휴대폰": {"num_format": "@"}}
    convertor.cell_comments = {"휴대폰": "- 를 제거한 후 입력해주세요."}
    
    excel_body = list()
    for x in range(1, 100):
        excel_body.append({"이름": f"홍길동{x}", 
                           "휴대폰": f"0101234567{x:02d}", 
                           "가입일": "2025-01-01"})
    convertor.body = excel_body
    convertor.write_sheet("sheet name")

배포

pypi 에 배포하면 더 의미있는 코드가 될 것이라고 생각해서 올려보자는 마음을 가졌다. 우선 두 라이브러리가 필요한데, build 와 twine 이다. build 는 패키지 빌드하는 라이브러리이고, twine 은 pypi 에 업로드하는 라이브러리이다.

빌드 기준은 pyproject.toml 의 정보를 기반으로 생성된다. 그래서 패키지 이름과 버전이 중복되지 않도록 입력해야한다. 아래와 같이 작성했다.

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "excel-convertor"
version = "1.4.0"
description = "엑셀 생성기 from dictionary"
authors = [
    { name = "Yu Jeonghoon", email = "jeonghoon@jnghn.xyz" }
]
license = { file = "LICENSE" }
readme = "README.md"
requires-python = ">=3.8"
dependencies = [
    "XlsxWriter>=3.0.0"
]

[project.urls]
"Homepage" = "https://github.com/moning02004/excel-convertor"
"Bug Tracker" = "https://github.com/moning02004/excel-convertor/issues"

[tool.setuptools.packages.find]
where = ["src"]

후에 아래와 같이 설치하여 업로드를 진행했다. build 후에는 dist/ 폴더 아래 파일이 생성된다. pypi 에 업로드 하기 위해서는 pypi 에 계정이 있어야 한다. 가입 후에 api token 을 발급받을 수 있으며 twine 시 입력해야만 업로드가 가능하다.

pip install build, twine

# 패키지 빌드
python -m build

twine upload dist/*

마무리

라이브러리 업로드는 처음이라 두근거리는 마음이 있다. 이 라이브러리를 발견하는 이들이 편하게 사용할 수 있었음 한다.