본문 바로가기

프로그래밍 언어/파이썬

파이썬 코드 배포하기: 패키징, 의존성 관리 및 자동화

파이썬 코드 배포하기: 패키징, 의존성 관리 및 자동화

파이썬 프로젝트를 성공적으로 개발한 후에는 이를 다른 환경에서 실행하거나 공유하기 위해 배포하는 과정이 필요합니다. 이 과정에는 패키징, 의존성 관리, 그리고 배포를 쉽게 하기 위한 자동화가 포함됩니다. 본 가이드에서는 파이썬 코드 배포를 위한 다양한 전략과 도구를 체계적으로 살펴봅니다.

 

 

목차

  1. 파이썬 코드 패키징
  2. 의존성 관리
  3. 자동화 도구 사용
  4. 배포 플랫폼 선택
  5. CI/CD 파이프라인 구축
  6. 실제 예제: 간단한 파이썬 프로젝트 배포

 

파이썬 코드 패키징

파이썬 코드를 배포하려면 먼저 이를 패키징해야 합니다. 패키징은 소스 코드를 모듈화하고 배포 가능한 형식으로 묶는 과정입니다. 파이썬에서 일반적으로 사용되는 패키징 형식은 다음과 같습니다:

  • Source Distribution (sdist): 소스 파일을 포함한 패키지입니다.
  • Wheel: 설치가 빠르고 쉽게 가능한 바이너리 패키지입니다.

패키징을 위해 파이썬의 setuptoolswheel 모듈을 사용할 수 있습니다. 기본적으로 setup.py 파일을 작성하여 패키지의 메타데이터와 의존성을 명시합니다.


# setup.py 예시
from setuptools import setup, find_packages

setup(
    name="my_project",
    version="0.1.0",
    packages=find_packages(),
    install_requires=[
        "requests",
        "numpy"
    ],
)
    

 

 

의존성 관리

프로젝트에서 사용하는 외부 라이브러리나 패키지를 관리하는 것은 매우 중요합니다. 의존성 관리의 핵심 도구는 pip이며, requirements.txt 파일을 통해 프로젝트에서 사용되는 모든 패키지를 명시할 수 있습니다.

의존성 관리 도구

  • pip: 파이썬 패키지를 설치하는 기본 도구입니다.
  • pipenv: 가상 환경과 의존성 관리를 통합한 도구로, Pipfile을 사용합니다.
  • poetry: 패키징과 의존성 관리를 동시에 제공하는 최신 도구로, 더 직관적인 방식으로 의존성을 관리합니다.

requirements.txt 파일을 사용한 예시는 다음과 같습니다:


# requirements.txt
requests==2.25.1
numpy==1.19.5
    

이를 통해 명시된 버전의 패키지를 설치할 수 있습니다:

pip install -r requirements.txt

 

 

자동화 도구 사용

배포 과정에서 일일이 수작업으로 패키징과 배포를 진행하는 것은 비효율적일 수 있습니다. 이를 해결하기 위해 자동화 도구를 사용하여 배포 과정을 자동화할 수 있습니다. 대표적인 자동화 도구는 다음과 같습니다:

  • Makefile: 여러 명령어를 모아서 자동화하는 전통적인 방법입니다.
  • Invoke: 파이썬 코드로 자동화 스크립트를 작성할 수 있는 도구입니다.
  • Fabric: 원격 서버 작업을 자동화하는 도구입니다.

예를 들어, Invoke를 사용해 배포 작업을 자동화하는 스크립트를 작성할 수 있습니다.

 

 

배포 플랫폼 선택

파이썬 프로젝트를 배포할 수 있는 여러 플랫폼이 있습니다. 선택한 배포 플랫폼에 따라 코드 배포 방식이 달라질 수 있습니다. 일반적인 배포 방법에는 다음이 있습니다:

  • PyPI: 파이썬 패키지 인덱스(Python Package Index)는 파이썬 패키지를 배포하는 가장 대표적인 플랫폼입니다.
  • Docker: Docker 이미지를 사용하여 프로젝트를 컨테이너화하고 배포할 수 있습니다.
  • 서버 직접 배포: 직접 서버에 접속하여 코드를 배포하고 실행하는 방식입니다.

PyPI에 배포하기 위해서는 twine을 사용하여 패키지를 업로드합니다:

twine upload dist/*

 

 

CI/CD 파이프라인 구축

코드 배포를 자동화하기 위해서는 CI/CD(Continuous Integration/Continuous Deployment) 파이프라인을 구축하는 것이 좋습니다. GitHub Actions, GitLab CI, Jenkins 등의 도구를 사용하여 코드가 푸시될 때마다 자동으로 테스트, 패키징, 배포가 이루어지도록 설정할 수 있습니다.

GitHub Actions 예시:


name: Python package

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
    - name: Install dependencies
      run: pip install -r requirements.txt
    - name: Run tests
      run: pytest
    - name: Build package
      run: python setup.py sdist bdist_wheel
    

 

 

 

 

실제 예제: 간단한 파이썬 프로젝트 배포

이제 간단한 파이썬 프로젝트를 실제로 배포하는 과정을 예제로 살펴보겠습니다. 프로젝트는 requests 라이브러리를 사용하며, PyPI에 배포하는 과정을 단계별로 설명합니다.

1. 프로젝트 구조 생성


my_project/
│
├── my_module.py
├── setup.py
└── requirements.txt
    

2. 패키징 설정

setup.py 파일을 작성하여 패키징 설정을 합니다:


from setuptools import setup, find_packages

setup(
    name="my_project",
    version="0.1.0",
    packages=find_packages(),
    install_requires=["requests"],
)
    

3. PyPI에 배포

패키지를 빌드하고 PyPI에 업로드하는 과정은 다음과 같습니다:


python setup.py sdist bdist_wheel
twine upload dist/*
    

 

 

결론

파이썬 프로젝트를 성공적으로 배포하려면 패키징, 의존성 관리, 그리고 자동화 과정이 필수적입니다. 이 가이드를 통해 파이썬 프로젝트를 체계적으로 배포하는 방법을 익혀 실무에서 활용할 수 있습니다.