본문 바로가기
Programming/Python

[Python] Python 라이브러리 패키지를 Github Actions를 이용하여 PyPi에 배포하는 방법

by SpiralMoon 2024. 2. 23.
반응형

Python 라이브러리 패키지를 Github Actions를 이용하여 PyPi에 배포하는 방법

파이썬 라이브러리를 Github Actions을 이용하여 쉽고 빠르게 pypi에 배포하는 환경을 구축해보자.

시리즈

2023.12.08 - [Programming/Javascript] - [Javascript] Javascript 라이브러리 패키지를 Github Actions를 이용하여 npm에 배포하는 방법

2023.12.15 - [Programming/C#] - [C#] C# 라이브러리 패키지를 Git Actions를 이용하여 NuGet에 배포하는 방법

2024.01.02 - [Programming/Java] - [Java] Java 라이브러리 패키지를 Git Actions를 이용하여 Maven central repository에 배포하는 방법


선행 작업

이 글은 pypi에 배포하려는 파이썬 라이브러리 프로젝트가 미리 github repository에 업로드 되어있어야한다.


작업 순서

  1. setup.py 작성
  2. README.md 작성
  3. PyPi API Token 발급
  4. Github Actions Secrets 설정값 등록
  5. Github Actions Workflow 작성
  6. 패키지 배포

setup.py 작성

PyPi에 패키지를 배포하려면 패키지의 요약 정보를 setup.py에 작성하여야 한다.

 

작성되어야 하는 항목은 다음과 같다.

  • name : 패키지명
  • version : 배포할 패키지 버전 (semantic versioning)
  • description (option) : 패키지 요약 설명
  • url (option) : 패키지와 관련된 정보를 제공하는 페이지
  • long_description, long_description_content_type (option) : 패키지 설명. (프로젝트 디렉토리에 포함된 README.md를 가리키는 것이 일반적으로 활용됨)
  • license (option) : 패키지의 사용범위를 제한하는 라이센스 정보
  • author (option) : 패키지 제작자명
  • author_email (option) : 패키지 제작자의 메일 주소

 

예시)

from setuptools import setup, find_packages

setup(
    name='sample_package',
    version='1.0.0',
    description='This is sample',
    url='https://github.com/your-github-name/repository-name',
    long_description=open('README.md', 'r').read(),
    long_description_content_type='text/markdown',
    packages=find_packages(),
    license='MIT',
    author='your name',
    author_email='???@???.???',
)

README.md 작성

프로젝트의 root 디렉토리에 README.md 파일을 작성해준다.

 

README.md를 작성하지 않은 상태로 PyPi에 업로드된 패키지

README.md 파일이 필수는 아니지만 작성하지 않을 경우 PyPi에 업로드 했을 때 화면이 너무 밋밋해보이기 때문에 완성도가 떨어지는 패키지라는 인식을 심어줄 수 있다. 별 내용이 없더라도 작성하는 것을 추천한다.


PyPi API Token 발급

PyPi에 패키지를 업로드하기 위해서는 api token이 필요한데 발급받기 위해서는 pypi 웹사이트의 계정이 필요하다.

pypi에 접속하여 회원가입을 한다.

 

로그인 후 프로필을 눌러 Account settings 메뉴로 접속한다.

API tokens 항목의 Add API token 버튼 클릭

 

새 api token 설정 화면

api token의 이름을 지어주고 Create token 버튼을 클릭한다.

 

api token이 생성되었다. api token의 값은 페이지를 이동하면 재확인이 불가하므로 복사해두자.


Github Actions Secrets 설정값 등록

Github Actions에서 배포를 진행할 것이기 때문에 패키지 프로젝트가 미리 github repository에 업로드 되어있어야 한다.

 

repository에 접속하여 Settings 탭을 클릭하여 Secrets and variables 항목의 Actions를 클릭한다.

 

이 곳에서는 Github Actions Workflow에서 사용할 환경변수를 만들 수 있다. New repository secret 클릭

 

환경변수의 이름(PYPI_API_TOKEN)을 짓고 위에서 복사해둔 pypi api token을 붙여넣은 후 Add secret을 클릭한다.
이제 Github Actions Workflow 파일에서 PYPI_API_TOKEN 라는 이름의 환경변수를 꺼내면 api token 값을 사용할 수 있게 되었다.


Github Actions Workflow 작성

name: Build and Publish Python

on:
  workflow_dispatch:

jobs:
  build_and_publish_python:
    runs-on: ubuntu-latest
    env:
      PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}

    steps:
      - name: Setup repository
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.9

      - name: Install dependencies
        run: pip3 install wheel twine

      - name: Build
        run: python3 setup.py sdist bdist_wheel

      - name: Publish to PyPI
        run: twine upload --repository-url https://upload.pypi.org/legacy/ -u __token__ -p ${PYPI_API_TOKEN} dist/*

 

프로젝트의 ./github/workflows 디렉토리에 deploy.yaml 파일을 작성하고 master 브랜치에 푸시한다.

 

버튼 클릭으로 실행할 것이기 때문에 on 트리거를 workflow_dispatch로 지정했다. 실행환경을 ubuntu-latest로 설정하고 환경변수 PYPI_API_TOKEN을 불러오도록 했다. 그리고 python 3.9 버전에서 빌드를 실행하도록 했다.

 

의존성 설치, 빌드, 퍼블리싱을 순서대로 실행하도록 명령어 구성을 해주면 된다.

 

만약 실행 트리거를 자동으로 바꾸고 싶다면 on 트리거로 workflow_dispatch를 사용하지 말고

on:
  push:
    branches:
      - master

 

처럼 대신하면 된다.


패키지 배포

repository에 접속하여 Actions 탭의 좌측 목록에서 위에서 작성한 workflow의 제목을 찾아서 클릭한다.

 

배포를 실행할 브랜치를 선택하고 Run workflow 클릭

 

workflow의 실행 결과

모든 step이 정상적으로 종료되었으면 PyPi에 패키지 배포를 성공한 것이다!

 

배포된 패키지는 pypi에 검색하면 표시된다. 이제 python 기반 프로젝트에서 pip install로 해당 패키지를 설치할 수 있다!

반응형

댓글