PyPI 패키지 업로드 해보기
파이썬 패키지 인덱스(PyPI)는 파이썬 프로젝트를 부품화해서 아카이빙할 수 있는 메타데이터 서비스이다. 최신 PyPI에 대한 문서는 Python Packaging 사용자 가이드에서 참고할 수 있다.
Python은 다른 개발자가 오픈 소스 라이센스 조건에 따라 소프트웨어를 사용할 수 있도록하는 사용자 커뮤니티가 활발하게 지원된다.
Udacity AWS ML Foundation 강의 내용을 참고해서 PyPI 패키지를 업로드해봤다.
PyPi vs. Test PyPi
pipy.org와 test.pypi.org는 다른 웹사이트다. 회원가입도 물론 각기 따로 해줘야한다. 패키지 이름은 반드시 유니크해야 한다.
커맨드 창에서 입력할 때는 언더데쉬(_)를 사용해도, repository에 이름은 그냥 데쉬(-)로 표기되는 것을 확인할 수 있다.
먼저 pypi.org에 회원 가입을 한다.
파일 구성
├── dist_hamon
│ ├── Binomialdistribution.py
│ ├── Gaussiandistribution.py
│ ├── Generaldistribution.py
│ ├── README.md
│ ├── __init__.py
│ ├── license.txt
│ └── setup.cfg
└── setup.py
먼저 올리고자하는 패키지 python 코드를 작성한다. 다음으로 license.txt
를 작성한다. 오픈 소스 라이센스는 여러 종류가 있지만 여기서는 MIT를 사용했다. README.md
파일에 해당 패키지에 대한 설명을 덧붙인다. 마지막으로 setup.cfg
파일을 작성한다.
setup.cfg 파일에는 해당 패키지에 대한 메타데이터를 간단하게 작성한다.
[metadata]
description-file = README.md
이제 최종적으로 업로드하기 위한 setup.py
를 작성한다.
from setuptools import setup
setup(name='dist_hamon',
version='0.1',
description='Gaussian and Binomial distributions',
packages=['dist_hamon'],
author = 'Hadong Lee',
author_email = 'hadongme@gmail.com',
zip_safe=False)
패키지 이름과 작성자 정보를 입력한다.
업로드 Steps
- 패키지 파일을 작성한 폴더 위치를 확인하고, 해당 폴더 아래서 다음 명령어를 입력한다.dist_hamon.egg-info와 dist 폴더가 생성된 것을 확인할 수 있다. dist 폴더 안에는 tar.gz 파일이 있고, 이 파일을 업로드하게 된다.
python setup.py sdist
- test.pypi에 dist/ 폴더를 업로드한다.
pip install twine # commands to upload to the pypi test repository twine upload --repository-url https://test.pypi.org/legacy/ dist/* # > next: username과 password를 입력한다 # 업로드한 패키지 파일을 다운받아 설치해본다 pip install --index-url https://test.pypi.org/simple/ dist_hamon
- pypi에 설치한 패키지를 업로드한다.패키지 업로드 결과 확인
# command to upload to the pypi repository twine upload dist/*
- 패키지 설치하고 테스트해보기
# 파이썬 패키지 설치 pip install dist_hamon # 콘솔에서 테스트 해보기 python > from dist_hamon import Gaussian, Binomial > Gaussain(10, 7) # 결과 확인 > Binomial(.4, 25) # 결과 확인
More PyPi Resources
다른 연습을 해보고 싶다면 튜토리얼을 참고해 따라해보자.
'📒 Tech Note > 웹 프로그래밍' 카테고리의 다른 글
OAuth 2.0 이해하기 (0) | 2020.08.03 |
---|---|
[Python] 파이썬으로 Json 인코더와 디코더 사용하기(읽고 쓰기) (3) | 2020.08.01 |
[CS] C언어의 기초 (1) (0) | 2020.08.01 |
Swagger로 Express 시작하기 (1) | 2020.07.14 |
스프링부트 프로젝트 - 도서 관리 서비스(CRUD) (0) | 2020.07.14 |