5-1. 오픈 소스 프로젝트

uoayop·2021년 3월 30일
0

Leaf와 Python

목록 보기
20/21
post-thumbnail

"개발자에겐 이력서 몇백장보다 깃허브 주소 한줄이 더 의미있을 수 있다."

오픈 소스가 뭐에요?

오픈 소스는 프로젝트의 모든 코드가 저장소에 공개가 되어있다.
따라서 많은 개발자들이 코드를 직접 수정하고, 기능을 수정할 수 있다.
한마디로 함께 개선하면서 완성해 나아가는 프로젝트다!

  • 파이썬의 대표적인 오픈소스
    • Flask, Django, pandas 등이 있다.

오픈 소스의 장점

1. 개발과정에서 개발 역량 향상 및 보유 스킬 능력 제시(향상)

2. in-house 개발과 달리 수 많은 디버깅, 개선 등을 통해 신뢰성, 안정성이 높은 어플리케이션을 이용할 수 있다.

  • 서비스에 적용하기에도 적합함; 아키텍쳐 효용성, 고품질

3. 적시에 사용 가능

  • 바로 pip로 설치 가능

오픈 소스 프로젝트 참여 장점

1. 답변, 기능 추가, 사명감

2. 다양한 이슈 해결을 통한 개발 역량 강화 (실력 상승)

- 모르는 사람들이 내 소스코드를 보고, 피드백을 준다.

3. 코드 퀄리티, 알고리즘, 다양한 지식 향상

4. ** 구직 시 합격 가능성 매우 높음

- 창업 시 좋은 팀원 셋업 가능성 향상

5. 이슈 등재를 통해서 문제 해결 가능성 매우 높음 (깃허브나 스택 오버플로우)

- 수많은 개발자 참여

6. 효율적인 코드 작성 노하우 향상

7. 개방된 구조로 서로 공유하고 돌려주는 문화 체험 가능


간단한 유틸성 패키지를 만들어서 배포해보자!

1. 이미지 변환 작업

강의에서는 PNG나 JPG의 파일을 GIF 파일로 변환하는 이미지 변환 작업을 했다.

import glob 
from PIL import Image
  • glob 모듈로 파일에 있는 모든 PNG 파일을 불러올 수 있다.
  • pip install pillow 로 의존성이 있는 패키지를 먼저 설치해주면, PIL에서 Image 모듈을 사용할 수 있다.
path_in = './project/images/*.png'
path_out = './project/image_out/result.gif'
  • 이미지를 불러올 경로 'path_in'과 생성된 GIF 파일을 저장할 경로'path_out' 을 정해준다.
img, *images = \
[
  Image.open(f).resize((320,240),
  Image.ANTIALIAS) 
  for f in sorted(glob.glob(path_in))
]
  1. glob을 통해 path_in에 있는 파일을 모두 불러온다.
  2. 불러온 이미지의 사이즈를 한가지로 통일 시켜준다.
  3. 이미지의 사이즈가 리사이징 될 때 덜 깨지도록 ANTIALIAS 속성을 추가해준다.
img.save(
    fp = path_out,
    format='GIF',
    append_images = images,
    save_all = True,
    duration = 500,
    loop = 0
)
  • 불러온 이미지를 저장해주자
    duration은 이미지가 바뀌는 속도이다.

2. 클래스 형태로 코드 작업

다른 사람들이 패키지를 import 해서 사용하기 편하도록 위의 코드를 객체화 해주자.

# converter.py

class GifConverter:
    def __init__(self,path_in=None, path_out=None, resize=(320,240)):
        self.path_in = path_in or './*.png'
        self.path_out = path_out or './output.gif'
        self.resize = resize

    def convert_gif(self):
        img, *images = \
        [Image.open(f).resize(self.resize, Image.ANTIALIAS) for f in sorted(glob.glob(self.path_in))]

        # 가장 중요한 예외처리
        try:
            img.save(
                fp=self.path_out,
                format='GIF',
                append_images = images,
                save_all=True,
                duration = 500,
                loop = 0
            )                    
        except IOError:
            print('Cannot Convert', img)
  • init 함수를 통해서 경로와 사이즈를 사용자가 정할 수 있게 해주었다.
  • 이미지 변경화 작업은 함수로 빼서 작업해고, 혹시나 발생할 수 있는 에러를 대비해서 예외 처리를 해주었다.

import (파일)

위에서 작업한 converter.py는 클래스 형태이므로 모듈이라고 볼 수 있다.
따라서 완성된 패키지 모듈이라고 보고 import 하면 된다.

# user.py

from converter import GifConverter as gfc

# 클래스 생성
c = gfc('(이미지를 불러올 경로)', '(변환 결과를 저장할 경로)',(사이즈))

# 변환
c.convert_gif()

정리

  • 개발자라면 오픈 소스 배포는 한번쯤 해보는 것이 실력 향상에 좋다!
  • 작성한 코드를 배포하기 위해선 반드시 클래스 형태로 작성을 해줘야 한다.
  • 예외 처리를 꼼꼼하게 해주자. 개발자가 유지보수를 할 때도, 사용하는 유저에게도 좋다.

이렇게 클래스 형태로 작성한 코드를 바탕으로 PyPI와 GitHub에 배포를 해보자


[출처]

인프런 - 모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)

profile
slow and steady wins the race 🐢

0개의 댓글