PyPi 에 파이썬 패키지 배포하기 0 - 빈 패키지 업로드
서비스 런칭한 지 1년 조금 넘은 회사에 들어갔는데 그 짧은 기간동안 쌓인 포트폴리오가 꽤 많았다.
하지만 그 때 그 때 닥치는대로 일을 하다보니 (스타트업은 다 그럴 수 밖에 없지! :D) 정리가 안 되어 있었고 그 정리하는 작업을 맡아서 해달라고 했다.
하는 김에 코드까지 싹 다 정리하는 게 좋을 거 같은데 일일이 손으로 정리하기에는 한계가 있어보였다.
여태까지 머신러닝 관련 코드는 2 사람이 다 짰기 때문에 코드의 확장성이나 가독성을 중요하게 생각하지 않았지만 앞으로는 회사 규모도 커질 거고(?) 운영도 잘 되어가니 추상클래스로 이루어진 패키지를 만들어서 어느정도 틀을 잡아둔 상태로 일을 하는 게 좋을 것 같았다.
나도 딱히 해본 적 없지만 ...!
그래서 먼저 머신러닝 개발 프로젝트에서 들어가는 공통 프로세스를 생각해보았다.
0. Data Studying
1. Data Preprocessing
2. Model Design
3. Training
4. Evaluation
첫번째 데이터 스터디는 말그대로 공부하면서 이것저것 해보는 거라 어떤 형식을 강요하기는 어렵겠고 리포트를 만들때 코드를 항상 첨부하도록 하는 방식으로 해야할 것 같다.
그 이후 네 가지 프로세스는 각 단계마다 하나의 추상클래스를 만들어두고 추상클래스의 추상 매소드를 강제로 구현하게 하는 방식으로 개발을 하면 좋을 것 같은데 뭐 맞는 방법인지는 모르겠다.
그냥 내 맘대로 하라고 하셨으니 내 맘대로 만드는 중 ^^
그래서 나도 쓰기 편하고 남들도 쓰기 편하게 PyPi 에 패키지로 등록해두려고 한다.
패키지 배포는 해본 적 없지만 내가 배포하려는 패키지는 그냥 추상클래스만 들어간 애들이라 별로 어려운 건 아닌 것 같다.
패키징 과정은 아래 페이지들을 참고했다.
https://packaging.python.org/overview/
1. 패키지 개발 환경 설정
패키지를 배포할 때 환경도 같이 배포해야하니 환경부터 새로 만들어 주었다.
Tensorflow 2 를 사용할 환경에서 돌아가야 하니 python=3.8 로 설정해주고 이름은 예를 들면 newsun0 으로 해주었다.
conda create -n newsun python=3.8
2. 빈 패키지 만들기
setup.py
__init__.py
EasterEggs/greetings.py
아예 비어있으면 테스트를 할 수 없으니 이스터 에그를 만들어 보았다.
setup.py 와 __init__.py 는 꼭 있어야 하는 파일이다.
setup.py
from setuptools import setup, find_packages
setup( name='AIFactoryDS',
version='0.0.0',
description='Project Skeleton',
author='yoosunyoung',
author_email='luysunyoung9@gmail.com',
url='https://github.com/YooSunYoung',
license='MIT',
py_modules=['greetings'],
python_requires='>=3.8',
install_requires=[],
packages=['EasterEggs']
)
__init__.py
__all__ = ['EasterEggs']
EasterEggs/greetings.py
import random
def how_are_you():
status = random.random()
if status < 0.3:
print("Good :)")
elif status < 0.6:
print("I'm alright")
else:
print("Let... let me go home...")
3. 패키지 업로드
pip install wheel && pip install twine
python setup.py bdist_wheel
twine upload dist/AIFactoryDS-0.0.0-py3-none-any.whl
여기서 내가 헷갈렸던게, setup.py 에 등록한 패키지 이름과 내가 pip 으로 패키지를 설치했을 때 불러올 수 있는 패키지 이름이 다르다는 것이다.
내가 불러올 수 있는 패키지 이름은 packages 에 명시해둔 이름들이다. 그러니까 이 경우에는 EasterEggs!
twine 으로 업로드를 하면 아이디와 비밀번호를 입력하라고 나온다.
업로드 하고 나면 이제 즈어기 setup.py 에서 name 으로 명시해둔 이름으로 패키지 설치가 가능하다.
4. 패키지 테스트
패키지 개발환경과 패키지 시험 환경은 분리 되어 있어야 하므로 conda 로 새로운 환경을 하나 더 만들었다.
conda create -n AIFactoryDS_testbed python=3.8
conda activate AIFactoryDS_testbed
pip install AIFactoryDS==0.0.1
터미널에서 간단히 테스트할 거라 python 콘솔을 켰다.
>>> from EasterEggs import greetings
>>> greetings.how_are_you()
Let... let me go home...
>>> greetings.how_are_you()
I'm alright
>>> greetings.how_are_you()
Good :)
어떻게 마침 실행시켰는데 넣어둔 세 가지 인사가 다 나왔다.
이제 다음 글에서는 본격적으로 머신러닝 개발 프로세스 추상화 객체를 구현해본다.