[파이썬] PyPI 패키지 만들기 및 배포

생성일
Nov 4, 2022 04:35 AM
언어
Python
중요
분야
배포

상세 컨텐츠

  • 핵심 명령어 *
python setup.py bdist_wheel
twine upload dist/Eu4ng_test-1.0.0.0-py3-none-any.whl
파이썬에서는 라이브러리 대신 패키지를 다운로드 받고 패키지 안에 있는 모듈을 이용한다.
패키지를 다운 받는 가장 보편적이고 간편한 방법은 pip install을 이용하는 방법이다.
" pip install 패키지 " 명령어를 사용하게 되면 PyPI에 등록되어 있는 패키지를 검색하여 이를 다운로드 받는데,
이곳에 패키지를 등록하여 배포하는 것이 생각보다 어렵지 않다. 굳이 다른 사람들에게 배포하는 용도가 아니더라도
본인이 만든 패키지를 어디서나 쉽게 사용할 수 있다는 게 가장 큰 장점인 것 같다.
1. 패키지 만들기
  • 패키지란 모듈들의 집합이므로 패키지명과 모듈명은 같을 필요가 없다.
  • 패키지를 PyPI에 등록하기 전에 당연히 패키지를 먼저 만들어야한다. 다만 PyPI에 업로드하기 위해서는 PyPI에서
제시하는 규격대로 패키지를 만들어야한다.
  • 먼저 패키지명부터 정하자. 겹치는 패키지명이 있으면 안되기 때문에 PyPI 홈페이지에서 이미 있는 이름인지 확인하면서 정하면 된다. 여기서는 "Eu4ng-test" 로 예제용 패키지를 작성하도록 할 것이며, "packageTest"로 예제용 모듈을 작성하겠다.
(1) 패키지 폴더 구성
  • 패키지 폴더 안에 setup.py, test폴더(__init__.py, packageTest.py) 생성
notion imagenotion image
notion imagenotion image
  • setup.py
from setuptools import setup, find_packages setup(name='Eu4ng-test', # 패키지 명 version='1.0.0.3', description='Test Package', author='Eu4ng', author_email='wjdgnsehowl@naver.com', url='https://eu4ng.tistory.com', license='MIT', # MIT에서 정한 표준 라이센스 따른다 py_modules=['packageTest'], # 패키지에 포함되는 모듈 python_requires='>=3', install_requires=[], # 패키지 사용을 위해 필요한 추가 설치 패키지 packages=['packageTest'] # 패키지가 들어있는 폴더들 )
  • __init__.py
__all__ = ['packageTest']
  • packageTest.py
def test_package(): print("This is package test")
(2) 패키지 빌드
  • 앞서 작성한 패키지를 PyPI에 업로드 가능한 형식으로 패키지를 변환해주고 이를 업로드를 해주면 된다
  • 이를 위해 wheel과 twine 패키지 설치를 먼저 진행해야한다. wheel은 패키지 변환을, twine은 업로드를 해준다.
  • pip install wheel && pip install twine
  • 이제 업로드할 패키지 폴더에서 cmd 창을 열고, python setup.py bdist_wheel 명령어를 입력하자
notion imagenotion image
파일 탐색기 주소창에 cmd를 입력하면 해당 폴더 경로에서 cmd 창이 열린다
notion imagenotion image
notion imagenotion image
notion imagenotion image
빌드된 패키지 파일
  • cmd 창 마지막줄에 removing build\bdist ~~~ 라고 뜨면 성공적으로 패키지가 빌드 완료된 것이다. 그리고 패키지 폴더 내에 build, dist, Eu4ng_test.egg-info 총 3개의 폴더가 생성되어 있을 것이다. 우리가 업로드할 파일은 dist 안에Eu4ng_test-1.0.0.3-py3-none-any 라는 이름으로 생성되어 있다. 이제 이를 업로드해주면 된다.
(3) 패키지 업로드 ( 게시글 수정으로 인해 버전명이 상이합니다. 빌드된 버전에 맞춰 이름 바꿔주시면 됩니다 )
  • 혹시 PyPI 회원가입을 아직 안 한 상태라면 회원가입부터 하고 오자.
  • cmd 창에 twine upload dist/Eu4ng_test-1.0.0.0-py3-none-any.whl 을 입력하자.
  • username에 PyPI 아이디를, password에 PyPI 비밀번호를 입력한다.
notion imagenotion image
패키지 업로드 완료
  • 이로써 패키지 업로드가 완료되었다. 이제 PyPI에 패키지를 검색하면 등록이 잘 되어있는 것을 확인할 수 있다.
  • 패키지 이름에 따라 검색을 해도 못 찾는 경우가 있으나 로그인 후 Your projects 에서 확인하거나 cmd 창에 View at: 뒤에 적혀있는 페이지 주소를 들어가도 된다.
notion imagenotion image
PyPI에 등록된 패키지
2. 패키지 다운로드 및 테스트
  • 이제 업로드 된 패키지를 다운로드 받아 잘 작동하는 지 테스트 해보겠다.
  • pip install Eu4ng-test
notion imagenotion image
업로드한 패키지가 잘 설치되는 모습
  • pip으로 설치된 패키지는 " 파이썬 설치경로\Lib/site-packages " 에 저장된다
notion imagenotion image
  • 모듈을 import 한 후 작동 테스트
from packageTest import packageTest packageTest.test_package()
notion imagenotion image
  • PyPI 업로드 주의사항
  • PyPI 규정에 따라 한번 배포된 패키지는 동일한 버전으로 수정이 불가능합니다.
예를 들어 PyPI Eu4ng-test 1.0.0.0 업로드 후, Eu4ng-test 1.0.0.0을 PyPI에서 삭제는 가능하나, 이후 Eu4ng-test 1.0.0.0 으로는 재업로드가 불가능합니다. 그렇기에 조금이라도 수정을 가해 업로드하고 싶다면, 버전 역시 수정해야합니다.
  • 저처럼 수정이 잦다면 버전명을 길게 잡아두는 게 좋습니다.
  • 버전명 길이는 얼마든지 수정 가능합니다. ex) 1.0.0.5 -> 1.0.0