언어 Language/파이썬 Python

Q. 파이썬 비공개 패키지 저장소 만들 때 주의사항은?

Tap to restart 2024. 5. 19. 09:00
반응형

A. 공개 패키지와 마찬가지로 최상위 패키지는 하나만 있어야 하고, pyproject.toml을 작성해야 한다. tag를 추가하는 것을 추천한다.

 

비공개 패키지는 언제 사용할까?

기업 규모가 커지게 되면, 서비스가 늘어난다. 예를 들어서 장고 프레임워크를 사용한다면, 장고 프레임워크를 사용하는 서비스가 여러 개가 되며, 당연히 저장소도 여러 개가 된다. 이때 유틸리티 성격의 공통 모듈이 늘어나게 된다. slack 메시지 처리, AWS S3 저장 관련 등 오픈 소스 패키지에서 약간만 수정해서 공통으로 쓰는 것들이 그런 예다. 이런 공통 모듈을 비공개 패키지로 분리하면 공통 모듈을 한 곳에서 관리할 수 있어서 생산성이 올라간다. 공개 패키지로 하면 더 편하지만 외부 공개할 수 없는 모듈도 존재할 때 비공개 패키지를 사용하게 된다.

 

최상위 패키지는 하나만!

최상위 패키지가 두 개 이상 있는 경우는 해당 비공개 패키지를 pip로 설치할 때 에러가 발생한다. tests 관련 패키지는 관계 없다.

 

 

taptorestart / htmltomd 저장소에서 htmltomd가 최상위 패키지이다.

 

pyproject.toml을 작성해야

오픈소스 공개 패키지와 마찬가지로 pyproject.toml을 작성해야 한다. (참고: Writing your pyproject.toml)

 

taptorestart / htmltomd 저장소의 예

[project]
name = "htmltomd"
version = "0.2.0"
license = "MIT"
authors = [
  { name="Tap to restart", email="taptorestart@example.com" },
]
description = "HTML to Markdown"
readme = "README.md"
requires-python = ">=3.6"
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
]
keywords = ["html", "markdown", "md"]

[project.urls]
"Homepage" = "https://github.com/taptorestart/htmltomd"
"Bug Tracker" = "https://github.com/taptorestart/htmltomd/issues"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

 

의존성 패키지가 있다면 반드시 추가할 것!

의존성 패키지가 있음에도 추가하지 않으면, 비공개 패키지를 사용하는 쪽에서 이슈가 발생한다.

비공개 패키지를 사용하는 쪽에서는 비공개 패키지 저장소에 있는 requirements.txt에 있는 의존성 패키지를 자동으로 설치하지 않는다.

 

만약 장고에 의존성이 있다면 아래처럼 적어줘야 한다.

 

django-filter 패키지의 예

[project]
...
dependencies = ["Django>=4.2"]

 

git tag 추가 추천

해당 비공개 패키지를 사용하는 곳에서 설치할 때 tag 기반으로 설치하는 것이 명확하기 때문이다.

pyproject.toml에 적는 버전 기반으로 할 수도 있지만, 해당 버전은 중복으로 작성 가능하다.

같은 v0.1.0인데 코드가 다를 수 있다. 하지만 git tag는 반드시 유일해야 한다. 중복이 불가하다.

tag를 추가하고 tag 기반으로 설치하는 것이 명확하다.

 

requirements.txt 에 아래처럼 추가해두고 환경변수에 GITHUB_TOKEN을 추가해두면 pip로 설치할 수 있다.

git+https://x-access-token:${GITHUB_TOKEN}@github.com/taptorestart/htmltomd@v0.2.0

 

 

반응형