파이썬 패키지 만들기

Jooss·2024년 6월 12일

python

목록 보기
3/3

dooray api를 만져보려고 하다가 package로 만들면 유용하겠단 생각이 들었다.
한번도 해본적 없으니까 pypi에 배포까지 해보자.

패키지 작성

이것저것 해보다가 역시나 공식doc를 참조하는게 제일 좋았다.
하다가 막히는 부분이 있어 블로그도 참고!

pyproject.toml 설정하기

먼저, build-system을 설정해야 한다. 네가지 종류가 있는데 공부는 차후에 진행하겠다. 일단은 다른 예시에서 많이 보던 setuptools를 이용하겠다.

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

메타데이터

pypi에 정보를 등록하기 위한 메타데이터 작성하기. 예시가 있으니 해당하는 항목에 그대로 작성

[project]
name = "dooray_api_wrapper"
version = "0.0.3"
authors = [
  { name="jooss287", email="jooss287@gmail.com" },
]
description = "Wrapper of NHN Dooray API"
readme = "README.md"
requires-python = ">=3.8"
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
]

[project.urls]
Homepage = "https://github.com/Jooss287/dooray-api-wrapper"
Issues = "https://github.com/Jooss287/dooray-api-wrapper/issues"

패키지 구조

python3.3(PEP 420)이후 버전부터는 파일이 없어도 패키지로 인식한다고 한다.
하위 호환 명목에다가 관련 자료들, 이미 있는 패키지들 모두 있으니 나도 함께 동참하자.

C:.
├─src
│  └─dooray_api_wrapper
│     ├─common
│     │  ├─__init__
│     │  └─dooray_request.py
│     ├─const
│     │  ├─__init__
│     │  └─const.py
│     ├─dooray
│     │  ├─__init__
│     │  ├─wiki.py
│     │  └─project.py
│     ├─structure
│     │  ├─__init__
│     │  ├─response_header.py
│     │  └─response_result.py
│     └─__init__
├─pyproject.toml
├─README.md
├─LICENSE
└─tests

패키지 빌드 및 업로드

이제 Pypi에 업로드를 위한 준비는 다 끝났다. 산출물을 만들기 위해 빌드하고, 업로드 하는 것 뿐.
command line은 매번 잊어먹으니 명령어만 간단한게 메모 해 두겠다.
별도의 에러가 발생 할 경우 계속해서 정리 할 예정이다.

1. 필요한 패키지 설치(업데이트)

python -m pip install --upgrade pip
python -m pip install --upgrade build
python -m pip install --upgrade twine

2. 패키지 빌드

python -m build

빌드하면 dist 폴더에 whl 파일과 tar.gz 파일 생성

3. 패키지 업로드

python -m twine upload dist/*

4. 패키지 다운로드

pip install --upgrade dooray-api-wrapper

testpypi?

테스트를 위한 전용 repository. 실제 pypi에 업로드 하기 전 여기에서 테스트하고 제대로 실행해도 될것같다.

이전 단계에서는 pypi에 업, 다운로드를 하기 위한 명령어를 적어 두었으나, 테스트용을 위한 명령어도 기록이 필요 할 것 같다.

testpypipypi와 다른 별도의 index page이므로 별도의 가입 절차와 2FA 인증, token 작업을 진행해야 한다.

testpypi 패키지 업로드

python -m twine upload --repository testpypi dist/*

testpypi 패키지 다운로드

python -m pip install --index-url https://test.pypi.org/simple/ --no-deps {패키지명}

추가 사항

token ?

2023년 말 부터 pypi 업로드를 위해서는 token이 필요하다. token을 만들기 위해서는 계정에 2FA인증까지 설정 해 두어야 한다.

token 생성

  1. https://test.pypi.org/manage/account/#api-tokens
  2. 스크롤 중단 쯤 API tokens 찾기
  3. Add API token

token 운영

token을 직접 복사해서 운영하는 방법도 있지만
기왕 어딘가 붙여 둘 것이라면 pc에 지속적으로 쓰는 방법이 있다고 한다.
그런데 잘 안된다.. 확인 필요!

Windows 기준으로

  • Global
    • %ProgramData%\pip\pip.ini
  • User
    • %APPDATA%\pip\pip.ini
  • Site
    • VIRTUAL_ENV%\pip\pip.ini

Linux나 Mac은 Configuration docs를 참조하자.

생성한 파일에 아래와 같이 입력한다.
{token key} 부분에 copy한 토큰을 입력해준다.

[dooray-api-wrapper]
  repository = https://pypi.org/project/dooray-api-wrapper/
  username = __token__
  password = {token key}

패키지 업데이트

당연한 사실이지만, 패키지를 업데이트 하는 방법도 알아야겠다.
시도하면 알 수 있는것이지만, 그래도 적어두면 편하니까.
명령어는 동일하되, pyproject.toml파일의 version 만 수정해서 build - upload 를 진행하면 된다.

특이사항

testpypi의 존재를 모르는 상황에서 pypi 에 패키지 배포를 하고 이것저것 수정하려다가 여러 에러를 만나고, 다시 하고자 패키지를 삭제했었다. pypi는 패키지의 이름도 기억하지만, 동시에 버전도 기억하고 있으므로 한번 업로드한 패키지+버전은 재 업로드가 불가능하다.

만약 이미 업로드한 내역이 있다면 버전을 올려서 다시 시도해보자.

profile
개발자 세상을 여행중인 히치하이커입니다.

0개의 댓글