파이썬으로 작성된 프로그램을 배포하는 방법에는 여러 가지가 있다. 각각의 방법을 비교해보자.
가장 간단하고 아날로그적인 방법으로는 코드를 압축하여 배포하는 방법이 있다.
개발자는 requirements.txt
에 필요한 패키지 목록을 작성하고 전체 프로젝트를 압축한다. 사용자는 필요한 패키지를 설치하고 프로그램을 실행한다. 사용자의 컴퓨터에 파이썬 설치가 필요하다.
# 사용자
# 패키지 설치
pip install -r requirements.txt
# 프로그램 실행
python run.py
다음으로는 .exe 실행 파일을 생성하여 배포하는 방법이 있다. 사용자의 컴퓨터에 파이썬 설치가 필요하지 않지만 속도가 느리다. 개발자는 pyinstaller 패키지를 설치한 뒤 다음의 명령어로 실행 파일을 생성하면 된다.
# 개발자
# 패키지 설치
pip install pyinstaller
# 실행파일 생성
pyinstaller run.py
도커를 사용하여 애플리케이션을 배포하면, 애플리케이션과 그 의존성을 포함하는 컨테이너 이미지를 만들어 배포 및 실행 환경의 일관성을 보장하고 복잡한 환경 설정 없이 애플리케이션을 실행할 수 있게 한다. 개발자는 도커 파일을 작성한 뒤 도커 이미지를 빌드 하고 도커 허브와 같은 레지스트리에 이미지를 push하여 배포한다. 사용자는 도커 이미지를 pull 받아 컨테이너를 실행하면 된다.
도커에 대한 글은 따로 존재하므로 여기서는 간략히 정리한다.
파이썬 패키지는 사용자의 컴퓨터에 파이썬이 깔려있다는 가정하에 간단하고 쉬운 방법이라 할 수 있다. 개발자는 setuptools를 사용하여 패키지를 만들고, 이를 PyPI(Python Package Index)에 업로드한다. 사용자는 이 패키지를 설치하여 프로그램을 실행하면 된다.
# 개발자
# setuptools와 wheel 설치
pip install --upgrade setuptools wheel
# 패키지 빌드
python setup.py sdist bdist_wheel
# twine 설치
pip install twine
# PyPI에 배포 (테스트 서버 사용 권장)
twine upload dist/*
---------------------------------------------
# 사용자
# 패키지 설치
pip install program_name
# 프로그램 실행
program_name
파이썬 패키지로 배포할 때 setup.py
파일이 반드시 필요하다. 다음과 같이 작성할 수 있다.
from setuptools import setup, find_packages
setup(
name='my_program', # 패키지 이름
version='0.1', # 패키지 버전
packages=find_packages(), # 포함할 패키지
install_requires=[
'aiohttp==3.9.5',
'aiosignal',
# ... Other dependencies
],
entry_points={
'console_scripts': [
'my_program=my_program.console:main', # 콘솔 명령 설정
],
},
author='Your Name', # 작성자 이름
author_email='your.email@example.com', # 작성자 이메일
description='A description of your package', # 패키지 설명
long_description=open('README.md').read(), # 긴 설명
long_description_content_type='text/markdown',
url='https://github.com/yourusername/my_program', # 프로젝트 URL
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
],
python_requires='>=3.6', # 최소 파이썬 버전
)
추가적으로 README.md, requirements.txt, MANIFEST.in, LICENSE 등의 파일을 포함하여 사용자 경험을 향상시킬 수 있다.
파이썬 패키지를 빌드하면 .tar.gz
파일과 .whl
파일이 생성되는 것을 확인할 수 있다. 이 두 가지를 비교하자면 다음과 같다.
pip install package-name.tar.gz
또는 python setup.py install
명령으로 설치.pip install package-name.whl
명령으로 설치.소스 배포 | 휠 배포 | |
---|---|---|
포맷 | .tar.gz | .whl |
내용물 | 소스 코드와 메타데이터 포함 | 사전 컴파일된 바이너리와 메타데이터 |
설치 속도 | 상대적으로 느림 | 매우 빠름 |
컴파일 필요 여부 | 필요할 수 있음 | 불필요 |
플랫폼 독립성 | 플랫폼 독립적 | 플랫폼 종속적 |
사용 예시 | C 확장 모듈을 포함한 패키지 | 순수 파이썬 패키지 또는 사전 컴파일된 바이너리 포함 패키지 |
또한 소스 배포(.tar.gz)는 단순히 파일을 압축하여 배포하는 것과는 다르다. 이는 소스 코드와 메타데이터를 포함한 압축 파일로 파이썬 패키지의 표준 구조를 따르며, setup.py 파일을 포함하여 패키지의 설치를 자동화할 수 있도록 한다.
깔끔한 설명 고맙습니다~!