소프트웨어 패키징과 배포
소프트웨어 패키징과 배포 (Software Packaging and Distribution)
이 라이브러리들은 Python 소프트웨어를 게시하고 설치하는 데 도움을 줍니다. 이 모듈들은 Python Package Index(PyPI)와 함께 동작하도록 설계되었지만, 로컬 인덱스 서버와 함께 또는 인덱스 서버 없이도 사용할 수 있습니다.
본문
이 장은 Python 소프트웨어를 패키징하고 배포하는 데 관련된 모듈들을 정리한 개요 장입니다. 이 장에서 문서화된 주요 모듈은 다음과 같습니다.
ensurepip — pip 설치 프로그램 부트스트래핑
ensurepip 모듈은 Python 설치에 pip(Python 패키지 설치 프로그램)를 설치하거나 업그레이드하는 데 사용됩니다. 주요 내용:
- 명령줄 인터페이스(Command-line interface) —
python -m ensurepip형식으로 실행합니다. 기본 동작은 가상 환경이 활성화되어 있는지 등을 고려하여 pip를 설치하거나 업그레이드합니다. - 모듈 API(Module API) —
ensurepip.version()함수가 사용 가능한 pip 버전을 반환하고,ensurepip.bootstrap()함수가 pip 설치를 수행합니다.
ensurepip는 Python 배포판에 포함된 pip의 번들 버전을 활성 Python 환경에 설치합니다. 일반적으로 python -m ensurepip --upgrade처럼 사용하여 pip를 최신 상태로 유지하고, --user 옵션으로 사용자별로 설치하거나 --default-pip 옵션으로 기본 pip로 설정할 수 있습니다.
Python 소프트웨어 배포는 일반적으로 setup.py/pyproject.toml에 패키지 메타데이터를 정의하고, 이를 빌드하여 배포판을 만든 뒤 PyPI에 업로드하는 과정으로 이루어집니다. 사용자는 pip install <패키지명>으로 이를 설치합니다. 이 장의 모듈들은 이 과정을 지원합니다.
PyPI는 Python 소프트웨어를 게시하고 공유하는 중앙 저장소입니다. 배포된 패키지는 다양한 의존성을 가질 수 있으며, pip는 이러한 의존성을 자동으로 해결·설치합니다. 모듈들은 PyPI 없이도 로컬 인덱스 서버나 직접 설치 방식으로 사용할 수 있어, 사내(사설) 환경에서도 패키지 배포와 설치가 가능합니다.
패키징 과정에서는 일반적으로 pyproject.toml 또는 setup.py에 패키지 이름, 버전, 의존성, 진입점(entry point) 등의 메타데이터를 정의합니다. 이 메타데이터를 기반으로 소스 배포판(sdist)과 휠(wheel) 형태의 빌드된 배포판이 생성되어 PyPI에 업로드됩니다.
사용자 측에서는 pip install <패키지명>으로 패키지를 설치하고, pip list로 설치된 패키지를 확인하며, pip uninstall로 제거합니다. 프로젝트 의존성은 requirements.txt나 pyproject.toml의 의존성 섹션으로 관리하며, 가상 환경(virtualenv)과 결합해 프로젝트별로 격리된 의존성 환경을 구성하는 것이 일반적입니다.
이 장의 ensurepip는 이러한 pip 기반 워크플로우가 가능하도록 Python 설치에 pip 자체를 부트스트래핑하거나 최신 상태로 유지하는 역할을 하며, 패키징·배포 생태계의 시작점이 됩니다. 또한 --target, --user, --no-index 같은 pip 옵션과 로컬 휠 저장소를 활용하면 네트워크가 제한된 환경에서도 패키지를 배포·설치할 수 있습니다.
패키지 빌드 도구는 setuptools, wheel, build 등 별도의 도구들이 담당하며, 표준 라이브러리의 ensurepip는 그 기반인 pip 설치를 보장합니다. python -m pip를 통해 패키지를 설치, 업그레이드, 제거하고 의존성 트리를 검사하며, pip freeze로 현재 환경의 정확한 버전 목록을 requirements.txt로 내보낼 수 있습니다.
배포판(배포 아티팩트)의 종류로는 소스 코드와 메타데이터를 담은 sdist와, 미리 빌드되어 빠르게 설치되는 wheel이 있습니다. wheel은 이진 확장 모듈을 포함할 수 있어 사용자의 빌드 과정 없이도 플랫폼별 휠이 자동 선택됩니다.
이 장의 모듈들은 PyPI의 표준 메타데이터 형식을 따르므로, 배포한 패키지는 pip나 기타 호환 도구가 표준적으로 해석할 수 있고, 버전 제약(예: >=1.0,<2.0)을 통한 의존성 해석도 일관되게 수행됩니다. 이로써 전체 Python 패키지 생태계가 유기적으로 연결됩니다.
배포 시점에는 만들어진 배포판의 파일을 검증하고 서명하는 것이 좋습니다. pip는 설치 전에 사용자가 제공한 체크섬으로 배포판 무결성을 확인할 수 있고, PyPI 업로드 도구는 패키지 메타데이터의 필수 필드(이름, 버전, 라이선스, 설명, 요구 Python 버전 등)가 올바른지 검증합니다.