PyPI에 Python 패키지를 업로드
PyPI에 Python 패키지를 업로드하는 과정은 몇 가지 단계를 거쳐야 합니다. 아래는 그 과정을 순서대로 설명합니다.
### 1. 패키지 준비하기
먼저, PyPI에 업로드할 패키지를 준비해야 합니다. `setup.py` 파일을 만들고, 패키지의 메타데이터를 작성합니다.
```python
from setuptools import setup, find_packages
setup(
name="패키지이름", # 패키지 이름
version="0.1.0", # 버전
description="패키지 설명", # 간단한 설명
author="작성자 이름",
author_email="작성자 이메일",
url="https://github.com/username/repository", # 프로젝트 URL
packages=find_packages(),
install_requires=[ # 필요한 패키지들
# '패키지명>=버전'
],
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
```
`from setuptools import setup, find_packages`는 Python 패키지를 배포하기 위해 사용하는 모듈과 함수들입니다. `setuptools`는 Python 패키지를 쉽게 배포하고 설치하도록 돕는 도구 모음이고, 특히 PyPI에 올릴 때 자주 사용됩니다.
- **`setup()`**: `setup.py` 파일의 핵심 함수로, 패키지의 메타데이터와 설정을 정의합니다. `setup()` 함수에 패키지 이름, 버전, 저자, 설명, 의존성 등의 정보를 넘기면 `setuptools`가 이를 이용해 패키지를 준비하고 빌드합니다.
- **`find_packages()`**: 프로젝트 내에서 패키지(디렉터리로 이루어진 모듈)를 자동으로 찾아주는 함수입니다. 예를 들어, `find_packages()`를 사용하면 `src` 디렉터리나 서브폴더에 있는 Python 패키지들을 일일이 나열하지 않아도 자동으로 찾아 등록해줍니다.
일반적인 `setup.py`의 모습은 다음과 같습니다:
```python
from setuptools import setup, find_packages
setup(
name="패키지이름",
version="0.1.0",
packages=find_packages(),
install_requires=[
# 필요한 패키지들
],
# 기타 메타데이터
)
```
이렇게 작성된 `setup.py` 파일을 이용해 `python setup.py install`이나 `twine` 등의 툴로 패키지를 빌드하고 배포할 수 있게 됩니다.
### 2. `README.md` 파일 준비
PyPI에 표시될 설명을 담은 `README.md` 파일을 작성해 `setup.py`에서 `long_description`으로 사용하게 할 수 있습니다. `README.md`가 패키지 설명에 나타나도록 하려면 `long_description_content_type="text/markdown"`을 추가하세요.
```python
with open("README.md", "r") as fh:
long_description = fh.read()
setup(
# ...
long_description=long_description,
long_description_content_type="text/markdown",
# ...
)
```
### 3. 빌드 도구 설치
패키지를 빌드하려면 `build`와 `twine` 모듈이 필요합니다. 다음 명령어로 설치하세요.
```bash
pip install build twine
```
### 4. 패키지 빌드
다음 명령어로 패키지를 빌드합니다. `dist` 폴더에 `.tar.gz`와 `.whl` 파일이 생성됩니다.
```bash
python -m build
```
### 5. PyPI에 업로드
PyPI에 패키지를 업로드하려면 [PyPI 계정](https://pypi.org/)을 만들고, `~/.pypirc` 파일에 인증 정보를 저장합니다.
```
[distutils]
index-servers =
pypi
[pypi]
username = __token__
password = pypi-토큰-값
```
PyPI 토큰은 [PyPI의 계정 설정 페이지](https://pypi.org/manage/account/#api-tokens)에서 생성할 수 있습니다.
그 후, 다음 명령어로 패키지를 PyPI에 업로드합니다.
```bash
twine upload dist/*
```
### 6. 설치 확인
패키지가 제대로 업로드되었는지 확인하려면 다음 명령어로 패키지를 설치해보세요.
```bash
pip install 패키지이름
```
추가로 알아두면 좋은 정보 몇 가지
### 1. **패키지 버전 관리**
- PyPI는 동일한 버전의 패키지를 중복 업로드할 수 없으므로, 업데이트 시 `version` 값을 꼭 변경하세요. 예를 들어 `0.1.0`에서 `0.1.1`로 올리면 됩니다.
- 버전 관리는 [PEP 440](https://peps.python.org/pep-0440/)의 표준을 따르는 것이 좋습니다.
### 2. **테스트 환경(PyPI Test)**
- 바로 실서비스(PyPI)에 올리기 전에 테스트 환경([TestPyPI](https://test.pypi.org/))에서 업로드를 연습할 수 있습니다. TestPyPI는 실험적으로 업로드해보기에 좋은 장소입니다.
- `twine upload --repository testpypi dist/*` 명령어를 사용하면 됩니다. TestPyPI에 업로드 후에는 `pip install --index-url https://test.pypi.org/simple/ 패키지이름`으로 설치를 테스트할 수 있습니다.
### 3. **배포 자동화**
- 패키지를 자주 업데이트하거나 CI/CD 환경에서 자동으로 배포하려면 GitHub Actions, GitLab CI/CD, Travis CI 등의 도구를 활용해 자동화 스크립트를 구성할 수 있습니다.
- 예를 들어 GitHub Actions를 이용하면 `release` 시 자동으로 PyPI에 배포되도록 설정할 수 있습니다.
### 4. **패키지 메타데이터 개선**
- `setup.py`에서 `keywords`, `license`, `project_urls` 등을 추가하면 사용자들이 패키지를 더 쉽게 검색하고 정보를 얻을 수 있습니다.
- 특히 `project_urls`에 GitHub 링크나 Issue Tracker를 추가하면 사용자들이 소스 코드나 버그 리포트를 더 쉽게 접근할 수 있습니다.
이 외에도 `pyproject.toml`을 이용한 설정이나 패키지 배포와 관련된 CI/CD 설정을 추가하면 배포 관리가 더 쉬워질 수 있습니다
댓글
댓글 쓰기