Skip to content

대체 패키지 인덱스 사용하기

uv는 기본적으로 공식 Python Package Index(PyPI)를 사용하지만, 다른 패키지 인덱스도 지원한다. 대부분의 대체 인덱스는 다양한 형태의 인증이 필요하며, 이를 위해 초기 설정이 요구된다.

Important

여러 인덱스 사용하기에 대한 문서를 꼭 읽어보자. uv의 기본 동작은 pip와 다르며, 이는 의존성 혼동 공격을 방지하기 위한 조치다. 하지만 이로 인해 uv가 예상과 다른 버전의 패키지를 찾지 못할 수 있다.

Azure Artifacts

uv는 Azure DevOps Artifacts에서 패키지를 설치할 수 있다. Personal Access Token (PAT)을 사용하거나 keyring 패키지를 통해 대화형으로 피드에 인증할 수 있다.

PAT 사용하기

PAT(Personal Access Token)를 사용할 수 있는 경우(예: Azure 파이프라인의 $(System.AccessToken)), "Basic" HTTP 인증 방식을 통해 자격 증명을 제공할 수 있다. URL의 비밀번호 필드에 PAT를 포함한다. 사용자 이름도 반드시 포함해야 하지만, 어떤 문자열이든 상관없다.

예를 들어, $ADO_PAT 환경 변수에 토큰이 저장되어 있다면, 인덱스 URL을 다음과 같이 설정한다:

$ export UV_INDEX=https://dummy:$ADO_PAT@pkgs.dev.azure.com/{organisation}/{project}/_packaging/{feedName}/pypi/simple/

keyring 사용하기

PAT(개인 액세스 토큰)가 없는 경우, keyring 패키지와 artifacts-keyring 플러그인을 사용해 Artifacts에 인증할 수 있다. 이 두 패키지는 Azure Artifacts 인증에 필수적이므로, Artifacts가 아닌 다른 소스에서 미리 설치해야 한다.

artifacts-keyring 플러그인은 Azure Artifacts Credential Provider 도구를 래핑한다. 이 자격 증명 프로바이더는 대화형 로그인을 포함한 몇 가지 인증 모드를 지원한다. 구성에 대한 자세한 내용은 도구 문서를 참고한다.

uv는 keyring 패키지를 서브프로세스 모드에서만 지원한다. keyring 실행 파일은 PATH에 있어야 하며, 전역적으로 또는 활성 환경에 설치되어야 한다. keyring CLI는 URL에 사용자 이름이 필요하므로, 인덱스 URL에 기본 사용자 이름 VssSessionToken을 포함해야 한다.

$ # 공개 PyPI에서 keyring과 Artifacts 플러그인 미리 설치
$ uv tool install keyring --with artifacts-keyring

$ # keyring 인증 활성화
$ export UV_KEYRING_PROVIDER=subprocess

$ # 사용자 이름을 포함한 인덱스 URL 설정
$ export UV_INDEX=https://VssSessionToken@pkgs.dev.azure.com/{organisation}/{project}/_packaging/{feedName}/pypi/simple/

Google Artifact Registry

uv는 Google Artifact Registry에서 패키지를 설치할 수 있다. 패스워드 인증이나 keyring 패키지를 사용해 저장소에 인증할 수 있다.

Note

이 가이드는 gcloud CLI가 이미 설치되고 설정되어 있다고 가정한다.

비밀번호 인증

"Basic" HTTP 인증 방식을 통해 자격 증명을 제공할 수 있다. URL의 비밀번호 필드에 액세스 토큰을 포함시킨다. 사용자 이름은 반드시 oauth2accesstoken이어야 하며, 그렇지 않으면 인증이 실패한다.

예를 들어, $ARTIFACT_REGISTRY_TOKEN 환경 변수에 저장된 토큰을 사용할 경우, 인덱스 URL을 다음과 같이 설정한다:

export ARTIFACT_REGISTRY_TOKEN=$(gcloud auth application-default print-access-token)
export UV_INDEX=https://oauth2accesstoken:$ARTIFACT_REGISTRY_TOKEN@{region}-python.pkg.dev/{projectId}/{repositoryName}/simple

keyring 사용하기

Artifact Registry에 인증하기 위해 keyring 패키지와 keyrings.google-artifactregistry-auth 플러그인을 사용할 수도 있다. 이 두 패키지는 Artifact Registry에 인증하는 데 필수적이므로, Artifact Registry 이외의 소스에서 미리 설치해야 한다.

artifacts-keyring 플러그인은 gcloud CLI를 감싸서 단기간 유효한 액세스 토큰을 생성하고, 이를 시스템 키링에 안전하게 저장하며, 토큰이 만료되면 자동으로 갱신한다.

uv는 keyring 패키지를 서브프로세스 모드에서만 지원한다. keyring 실행 파일은 PATH에 있어야 하며, 전역적으로 설치되거나 활성 환경에 설치되어 있어야 한다. keyring CLI는 URL에 사용자 이름이 필요하며, 이는 반드시 oauth2accesstoken이어야 한다.

# 공개 PyPI에서 keyring과 Artifact Registry 플러그인 미리 설치
uv tool install keyring --with keyrings.google-artifactregistry-auth

# keyring 인증 활성화
export UV_KEYRING_PROVIDER=subprocess

# 사용자 이름과 함께 인덱스 URL 설정
export UV_INDEX=https://oauth2accesstoken@{region}-python.pkg.dev/{projectId}/{repositoryName}/simple

AWS CodeArtifact

uv는 AWS CodeArtifact에서 패키지를 설치할 수 있다.

인증 토큰은 awscli 도구를 사용해 가져올 수 있다.

Note

이 가이드는 AWS CLI가 이미 인증된 상태라고 가정한다.

먼저, CodeArtifact 리포지토리에 대한 상수를 선언한다:

export AWS_DOMAIN="<your-domain>"
export AWS_ACCOUNT_ID="<your-account-id>"
export AWS_REGION="<your-region>"
export AWS_CODEARTIFACT_REPOSITORY="<your-repository>"

그 다음, awscli에서 토큰을 가져온다:

export AWS_CODEARTIFACT_TOKEN="$(
    aws codeartifact get-authorization-token \
    --domain $AWS_DOMAIN \
    --domain-owner $AWS_ACCOUNT_ID \
    --query authorizationToken \
    --output text
)"

마지막으로, 인덱스 URL을 설정한다:

export UV_INDEX="https://aws:${AWS_CODEARTIFACT_TOKEN}@${AWS_DOMAIN}-${AWS_ACCOUNT_ID}.d.codeartifact.${AWS_REGION}.amazonaws.com/pypi/${AWS_CODEARTIFACT_REPOSITORY}/simple/"

패키지 배포하기

자신의 패키지를 AWS CodeArtifact에 배포하려면 배포 가이드에 설명된 대로 uv publish를 사용할 수 있다. 이때 자격 증명과 별도로 UV_PUBLISH_URL을 설정해야 한다:

# uv가 AWS CodeArtifact를 사용하도록 설정
export UV_PUBLISH_URL="https://${AWS_DOMAIN}-${AWS_ACCOUNT_ID}.d.codeartifact.${AWS_REGION}.amazonaws.com/pypi/${AWS_CODEARTIFACT_REPOSITORY}/"
export UV_PUBLISH_USERNAME=aws
export UV_PUBLISH_PASSWORD="$AWS_CODEARTIFACT_TOKEN"

# 패키지 배포
uv publish

기타 인덱스

uv는 JFrog의 Artifactory와도 호환된다.