

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CodeArtifact를 Python과 함께 사용
<a name="using-python"></a>

이 항목에서는 CodeArtifact와 함께 Python 패키지 관리자인 `pip` , `twine` 및 Python 패키지 게시 유틸리티를 사용하는 방법에 대해 설명합니다.

**Topics**
+ [CodeArtifact로 pip 구성 및 사용](python-configure-pip.md)
+ [CodeArtifact로 twine 구성 및 사용](python-configure-twine.md)
+ [Python 패키지 이름 정규화](python-name-normalization.md)
+ [Python 호환성](python-compatibility.md)
+ [업스트림 및 외부 연결에서 Python 패키지 요청하기](python-upstream-external-connections-request.md)

# CodeArtifact로 pip 구성 및 사용
<a name="python-configure-pip"></a>

[pip](https://pypi.org/project/pip/)는 Python 패키지용 패키지 설치관리자 프로그램입니다. pip를 사용하여 CodeArtifact 리포지토리에서 Python 패키지를 설치하려면 먼저 CodeArtifact 리포지토리 정보와 보안 인증 정보로 pip 클라이언트를 구성해야 합니다.

pip는 Python 패키지를 설치하는 용도로만 사용할 수 있습니다. Python 패키지를 게시하기 위해 [twine](https://pypi.org/project/twine/)을 사용할 수 있습니다. 자세한 내용은 [CodeArtifact로 twine 구성 및 사용](python-configure-twine.md) 단원을 참조하십시오.

## `login` 명령으로 pip 구성
<a name="python-configure-pip-login"></a>

먼저에 설명된 AWS CLI대로와 함께 사용할 자격 AWS 증명을 구성합니다[CodeArtifact 시작하기](getting-started.md). 그런 다음 CodeArtifact `login` 명령을 사용하여 보안 인증을 가져오고 해당 인증을 사용하여 `pip`를 구성합니다.

**참고**  
소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 단원을 참조하십시오.

pip를 구성하려면 다음 명령을 실행합니다.

```
aws codeartifact login --tool pip --domain my_domain --domain-owner 111122223333 --repository my_repo
```

 `login`는 AWS 자격 증명을 사용하여 CodeArtifact에서 권한 부여 토큰을 가져옵니다. `login` 명령은 `--repository` 옵션을 통해 지정된 리포지토리로 `index-url`를 설정하도록 `~/.config/pip/pip.conf`를 편집하여 CodeArtifact와 함께 사용할 수 있도록 `pip`를 구성합니다.

`login` 직접 호출 후의 기본 승인 기간은 12시간이며, 토큰을 주기적으로 새로 고치려면 `login`을 직접적으로 호출해야 합니다. `login` 명령으로 만든 인증 토큰에 관한 자세한 내용은 [`login` 명령으로 생성된 토큰](tokens-authentication.md#auth-token-login)을 참조하세요.

## 로그인 명령 없이 pip를 구성하려면
<a name="python-configure-without-pip"></a>

 `login` 명령을 사용하여 `pip`를 구성할 수 없는 경우 `pip config`를 사용할 수 있습니다.

1.  AWS CLI 를 사용하여 새 권한 부여 토큰을 가져옵니다.
**참고**  
소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 단원을 참조하십시오.

   ```
   CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
   ```

1. `pip config`를 사용하여 CodeArtifact 레지스트리 URL 및 보안 인증을 설정합니다. 다음 명령은 현재 환경 구성 파일만 업데이트합니다. 시스템 전체 구성 파일을 업데이트하려면 `site`를 `global`로 바꿔야 합니다.

   ```
   pip config set site.index-url https://aws:$CODEARTIFACT_AUTH_TOKEN@my_domain-111122223333.d.codeartifact.region.amazonaws.com/pypi/my_repo/simple/
   ```
**참고**  
듀얼 스택 엔드포인트를 사용하려면 `codeartifact.region.on.aws` 엔드포인트를 사용합니다.

**중요**  
레지스트리 URL은 슬래시(/)로 끝나야 합니다. 그렇지 않으면 리포지토리에 연결할 수 없습니다.

**pip 구성 파일 예**

다음은 CodeArtifact 레지스트리 URL 및 보안 인증을 설정한 후의 `pip.conf` 파일 예입니다.

```
[global]
index-url = https://aws:eyJ2ZX...@my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/pypi/my_repo/simple/
```

## pip 실행
<a name="python-run-pip"></a>

`pip` 명령을 실행하려면 CodeArtifact를 사용하여 `pip`를 구성해야 합니다. 자세한 내용은 다음 문서를 참조하세요.

1. [with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md) 섹션의 단계에 따라 AWS 계정, 도구 및 권한을 구성합니다.

1. [CodeArtifact로 twine 구성 및 사용](python-configure-twine.md)의 단계에 따라 `twine`을 구성합니다.

패키지가 리포지토리 또는 업스트림 리포지토리 중 하나에 있다고 할 경우, `pip install`을 사용하여 패키지를 설치할 수 있습니다. 예를 들어 다음 명령을 사용하여 `requests` 패키지를 설치할 수 있습니다.

```
pip install requests
```

`-i` 옵션을 사용하여 CodeArtifact 리포지토리 대신 [https://pypi.org](https://pypi.org)에서 패키지를 설치하는 것으로 일시적으로 되돌릴 수 있습니다.

```
pip install -i https://pypi.org/simple requests
```

# CodeArtifact로 twine 구성 및 사용
<a name="python-configure-twine"></a>

[twine](https://pypi.org/project/twine/)은 Python 패키지용 패키지 게시 유틸리티입니다. twine을 사용하여 CodeArtifact 리포지토리에 Python 패키지를 게시하려면 먼저 CodeArtifact 리포지토리 정보와 보안 인증 정보로 twine을 구성해야 합니다.

twine은 Python 패키지를 게시하는 용도로만 사용할 수 있습니다. Python 패키지를 설치하기 위해 [pip](https://pypi.org/project/pip/)를 사용할 수 있습니다. 자세한 내용은 [CodeArtifact로 pip 구성 및 사용](python-configure-pip.md) 단원을 참조하십시오.

## `login` 명령으로 twine 구성
<a name="python-configure-twine-login"></a>

먼저에 설명된 AWS CLI대로와 함께 사용할 자격 AWS 증명을 구성합니다[CodeArtifact 시작하기](getting-started.md). 그런 다음 CodeArtifact `login` 명령을 사용하여 보안 인증을 가져오고 해당 인증을 사용하여 twine을 구성합니다.

**참고**  
소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 단원을 참조하십시오.

twine을 구성하려면 다음 명령을 실행합니다.

```
aws codeartifact login --tool twine --domain my_domain --domain-owner 111122223333 --repository my_repo
```

 `login`는 AWS 자격 증명을 사용하여 CodeArtifact에서 권한 부여 토큰을 가져옵니다. `login` 명령은 `--repository` 옵션에서 지정한 리포지토리를 보안 인증과 함께 추가하도록 `~/.pypirc`를 편집하여 CodeArtifact와 함께 사용할 twine을 구성합니다.

`login` 직접 호출 후의 기본 승인 기간은 12시간이며, 토큰을 주기적으로 새로 고치려면 `login`을 직접적으로 호출해야 합니다. `login` 명령으로 만든 인증 토큰에 관한 자세한 내용은 [`login` 명령으로 생성된 토큰](tokens-authentication.md#auth-token-login)을 참조하세요.

## `login` 명령 없이 twine 구성
<a name="python-configure-twine-without-login"></a>

 `login` 명령을 사용하여 twine을 구성할 수 없는 경우 `~/.pypirc` 파일 또는 환경 변수를 사용할 수 있습니다. `~/.pypirc` 파일을 사용하려면 다음 항목을 파일에 추가합니다. 암호는 `get-authorization-token` API에서 획득한 인증 토큰이어야 합니다.

```
[distutils]
index-servers =
 codeartifact
[codeartifact]
repository = https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/pypi/my_repo/
password = auth-token
username = aws
```

**참고**  
듀얼 스택 엔드포인트를 사용하려면 `codeartifact.region.on.aws` 엔드포인트를 사용합니다.

환경 변수를 사용하려면 다음을 수행합니다.

**참고**  
자신이 소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 단원을 참조하십시오.

```
export TWINE_USERNAME=aws
export TWINE_PASSWORD=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
export TWINE_REPOSITORY_URL=`aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format pypi --query repositoryEndpoint --output text`
```

## twine 실행
<a name="python-run-twine"></a>

twine을 사용하여 Python 패키지 자산을 게시하려면 먼저 CodeArtifact 권한 및 리소스를 구성해야 합니다.

1. [with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md) 섹션의 단계에 따라 AWS 계정, 도구 및 권한을 구성합니다.

1. [`login` 명령으로 twine 구성](#python-configure-twine-login) 또는 [`login` 명령 없이 twine 구성](#python-configure-twine-without-login) 의 단계에 따라 twine을 구성합니다.

twine을 구성한 후 `twine` 명령을 실행할 수 있습니다. 다음 명령을 사용하여 Python 패키지 자산을 게시합니다.

```
twine upload --repository codeartifact mypackage-1.0.tgz
```

Python 애플리케이션을 빌드하고 패키징하는 방법에 관한 자세한 내용은 Python Packaging Authority 웹 사이트에서 [Generating Distribution Archives](https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives)를 참조하세요.

# Python 패키지 이름 정규화
<a name="python-name-normalization"></a>

CodeArtifact는 패키지 이름을 저장하기 전에 정규화합니다. 즉, CodeArtifact의 패키지 이름은 패키지가 게시될 때 제공된 이름과 다를 수 있습니다.

Python 패키지의 경우, 정규화를 수행할 때 패키지 이름은 소문자와 `.`, `-` 및 `_` 문자의 모든 인스턴스가 단일 `-` 문자로 대체됩니다. 따라서 `pigeon_cli` 및 `pigeon.cli` 패키지 이름은 `pigeon-cli`과 같이 정규화되어 저장됩니다. 정규화되지 않은 이름은 pip 및 twine에서 사용할 수 있지만 CodeArtifact CLI 또는 API 요청(예: `list-package-versions`) 및 ARN에서는 정규화된 이름을 사용해야 합니다. Python 패키지 이름 정규화에 관한 자세한 내용은 Python 설명서에서 [PEP 503](https://www.python.org/dev/peps/pep-0503/#normalized-names)을 참조하세요.

# Python 호환성
<a name="python-compatibility"></a>

CodeArtifact는 PyPI의 `XML-RPC` 또는 `JSON` API를 지원하지 않습니다.

CodeArtifact는 `simple` API를 제외한 PyPI의 `Legacy` API를 지원합니다. CodeArtifact는 `/simple/` API 엔드포인트를 지원하지 않지만 `/simple/<project>/` 엔드포인트는 지원합니다.

자세한 내용은 Python Packaging Authority의 GitHub 리포지토리에서 다음 섹션을 참조하세요.
+ [XML-RPC API](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/xml-rpc.rst)
+ [JSON API](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/json.rst)
+ [Legacy API](https://github.com/pypi/warehouse/blob/main/docs/dev/api-reference/legacy.rst)

## pip 명령 지원
<a name="pip-command-support"></a>

다음 섹션에는 지원되지 않는 특정 명령 외에도 CodeArtifact 리포지토리에서 지원하는 pip 명령이 요약되어 있습니다.

**Topics**
+ [리포지토리와 상호 작용하는 지원되는 명령](#supported-pip-commands-that-interact-with-a-repository)
+ [지원되는 클라이언트 측 명령](#supported-pip-client-side-commands)

### 리포지토리와 상호 작용하는 지원되는 명령
<a name="supported-pip-commands-that-interact-with-a-repository"></a>

이 섹션에는 `pip` 클라이언트가 구성된 레지스트리에 하나 이상의 요청을 보내는 `pip` 명령이 나열되어 있습니다. CodeArtifact 리포지토리에 대해 이러한 명령을 호출했을 때 제대로 작동하는 것으로 확인되었습니다.


****  

| 명령 | 설명 | 
| --- | --- | 
|   [install](https://pip.pypa.io/en/stable/reference/pip_install/)   |  패키지를 설치합니다.  | 
|   [download](https://pip.pypa.io/en/stable/reference/pip_download/)   |  패키지를 다운로드합니다.  | 

CodeArtifact는 `pip search`를 실행하지 않습니다. `pip`를 CodeArtifact 리포지토리로 구성한 경우 `pip search`를 실행하면 [PyPI](https://pypi.org/)에서 패키지를 검색하고 표시합니다.

### 지원되는 클라이언트 측 명령
<a name="supported-pip-client-side-commands"></a>

이러한 명령은 리포지토리와 직접 상호 작용할 필요가 없으므로 CodeArtifact는 명령을 지원하기 위해 아무 것도 할 필요가 없습니다.


****  

| 명령 | 설명 | 
| --- | --- | 
|   [uninstall](https://pip.pypa.io/en/stable/reference/pip_uninstall/)   |  패키지를 제거합니다.  | 
|   [freeze](https://pip.pypa.io/en/stable/reference/pip_freeze/)   |  설치된 패키지를 요구 사항 형식으로 출력합니다.  | 
|   [list](https://pip.pypa.io/en/stable/reference/pip_list/)   |  설치된 패키지를 나열합니다.  | 
|   [show](https://pip.pypa.io/en/stable/reference/pip_show/)   |  설치된 패키지에 대한 정보를 표시합니다.  | 
|   [check](https://pip.pypa.io/en/stable/reference/pip_check/)   |  설치된 패키지에 호환되는 종속성이 있는지 확인합니다.  | 
|   [config](https://pip.pypa.io/en/stable/reference/pip_config/)   |  로컬 및 글로벌 구성을 관리합니다.  | 
|   [wheel](https://pip.pypa.io/en/stable/reference/pip_wheel/)   |  요구 사항에 맞게 휠을 빌드합니다.  | 
|   [hash](https://pip.pypa.io/en/stable/reference/pip_hash/)   |  패키지 아카이브의 해시를 계산합니다.  | 
|   [completion](https://pip.pypa.io/en/stable/user_guide/#command-completion)   |  명령 완성을 돕습니다.  | 
|   [debug](https://pip.pypa.io/en/stable/reference/pip_debug/)   |  디버깅에 유용한 정보를 표시합니다.  | 
|  help  |  명령에 대한 도움말을 표시합니다.  | 

# 업스트림 및 외부 연결에서 Python 패키지 요청하기
<a name="python-upstream-external-connections-request"></a>

[pypi.org](https://pypi.org/)에서 파이썬 패키지 버전을 불러올 때, CodeArtifact는 해당 패키지 버전의 모든 에셋을 불러옵니다. 대부분의 Python 패키지에는 적은 수의 에셋이 포함되어 있지만 일부 패키지는 일반적으로 여러 하드웨어 구조와 Python 인터프리터를 지원하기 위해 100개가 넘는 에셋을 포함합니다.

기존 패키지 버전의 경우 새 에셋이 pypi.org에 게시되는 것이 일반적입니다. 예를 들어, 일부 프로젝트는 새 버전의 Python이 출시되면 새 에셋을 게시합니다. `pip install`로 CodeArtifact에서 Python 패키지를 설치하면 CodeArtifact 저장소에 유지 중인 패키지 버전이 pypi.org의 최신 자산 세트를 반영하도록 업데이트됩니다.

마찬가지로, 현재 CodeArtifact 리포지토리에 없는 업스트림 CodeArtifact 리포지토리의 패키지 버전에 새 자산을 사용할 수 있는 경우에는 새 자산이 `pip install` 실행 시 현재 리포지토리에 보존됩니다.

## 삭제된 패키지 버전
<a name="python-yanked-versions"></a>

pypi.org의 일부 패키지 버전은 *삭제*된 것으로 표시되는데, 이는 패키지 설치 프로그램 (예: pip) 에게 버전 지정자와 일치하는 유일한 버전이 아니면 설치하지 말아야 한다고 알려주는 역할을 합니다(`==`또는 `===` 사용). 자세한 내용은 [PEP\$1592](https://peps.python.org/pep-0592/)를 참조하십시오.

CodeArtifact의 패키지 버전이 원래 [pypi.org](https://pypi.org/)에 대한 외부 연결에서 가져온 경우 CodeArtifact 리포지토리에서 패키지 버전을 설치하면 CodeArtifact는 패키지 버전의 업데이트된 삭제 메타데이터를 pypi.org에서 가져오는지 확인합니다.

### 패키지 버전이 삭제되었는지 확인하는 방법
<a name="test-yanked-version"></a>

CodeArtifact에서 패키지 버전이 삭제되었는지 확인하려면 `pip install packageName===packageVersion`를 사용하여 설치를 시도하세요. 패키지 버전이 삭제되었다면 다음과 유사한 경고 메시지가 표시됩니다.

```
WARNING: The candidate selected for download or install is a yanked version
```

[pypi.org](https://pypi.org/)에서 패키지 버전이 삭제되었는지 확인하려면 `https://pypi.org/project/packageName/packageVersion/`에서 패키지 버전의 pypi.org 목록을 확인하세요.

### 비공개 패키지에 제거 생태 설정하기
<a name="yanked-private-packages"></a>

CodeArtifact는 CodeArtifact 리포지토리에 직접 게시된 패키지의 제거된 메타데이터 설정을 지원하지 않습니다.

## CodeArtifact가 패키지 버전의 제거된 최신 메타데이터 또는 자산을 가져오지 않는 이유는 무엇입니까?
<a name="no-yanked-metadata"></a>

일반적으로 CodeArtifact는 CodeArtifact 리포지토리에서 Python 패키지 버전을 가져올 때 삭제한 메타데이터를 [pypi.org](https://pypi.org/)의 최신 상태로 유지되도록 합니다. 또한 패키지 버전의 자산 목록도 pypi.org 및 업스트림 CodeArtifact 리포지토리의 최신 세트로 업데이트됩니다. 이는 패키지 버전을 처음 설치하고 CodeArtifact가 pypi.org에서 CodeArtifact 리포지토리로 가져오는 경우나 이전에 패키지를 설치한 적이 있는 경우 모두 해당됩니다. 하지만 pip와 같은 패키지 관리자 클라이언트가 pypi.org 또는 업스트림 리포지토리에서 제거된 최신 메타데이터를 가져오지 않는 경우도 있습니다. 대신, CodeArtifact는 리포지토리에 이미 저장된 메타데이터를 반환합니다. 이 섹션에서는 이 문제가 발생할 수 있는 세 가지 방법에 대해 설명하겠습니다.

**업스트림 구성:** [disassociate-external-connection](external-connection.md#removing-an-external-connection)을 사용하여 pypi.org에 대한 외부 연결을 리포지토리 또는 업스트림에서 제거하면 제거된 메타데이터가 더 이상 pypi.org에서 새로 고침되지 않습니다. 마찬가지로 업스트림 리포지토리를 제거하면 제거된 리포지토리의 자산과 제거된 리포지토리의 업스트림은 현재 리포지토리에서 더 이상 사용할 수 없습니다. CodeArtifact [패키지 원본 컨트롤](package-origin-controls.md)을 사용하여 특정 패키지의 새 버전을 가져오는 것을 방지하는 경우에도 마찬가지입니다. 이 `upstream=BLOCK` 설정은 삭제된 메타데이터를 갱신하는 것을 차단합니다.

**패키지 버전 상태:** 패키지 버전의 상태를 `Published` 또는 `Unlisted`를 제외한 상태로 설정하면 해당 패키지 버전의 제거된 메타데이터와 자산은 새로 고침되지 않습니다. 마찬가지로 특정 패키지 버전(예:`torch 2.0.1`)을 가져오는데 업스트림 리포지토리에 동일한 패키지 버전이 있고 그 상태가 `Published` 또는 `Unlisted`가 아닌 경우에는 제거된 메타데이터 및 자산의 업스트림 리포지토리에서 현재 리포지토리로의 전파가 차단됩니다. 이것은 다른 패키지 버전 상태가 해당 버전을 더 이상 어떤 리포지토리에서도 사용할 수 없음을 가리키기 때문입니다.

**직접 게시:** 특정 패키지 버전을 CodeArtifact 리포지토리에 직접 게시하면 해당 패키지 버전의 제거된 메타데이터와 자산이 업스트림 리포지토리 및 pypi.org에서 새로 고침되지 않습니다. 예를 들어 웹 브라우저를 사용하여 패키지 `torch-2.0.1-cp311-none-macosx_11_0_arm64.whl` 버전에서 에셋 `torch 2.0.1`을 다운로드한 다음 twine을 사용하여 CodeArtifact 리포지토리에 `torch 2.0.1`을 게시한다고 가정해 보겠습니다. CodeArtifact는 패키지 버전이 pypi.org 외부 연결 또는 업스트림 리포지토리가 아닌 리포지토리에 직접 게시하여 도메인에 진입했음을 인지하고 추적합니다. 이 경우 CodeArtifact는 제거된 메타데이터를 업스트림 리포지토리 또는 pypi.org와 동기화된 상태로 유지하지 않습니다. 업스트림 리포지토리에 `torch 2.0.1`을 게시하는 경우에도 마찬가지입니다. 해당 패키지 버전이 있으면 제거된 메타데이터와 자산이 업스트림 그래프 아래의 리포지토리로 전파되는 것이 차단됩니다.