認証

基本的なHTTP認証

pipは、基本的なHTTPベースの認証クレデンシャルをサポートしています。これは、URLにユーザー名(およびオプションでパスワード)を提供することによって行われます。

https://username:password@pypi.company.com/simple

単一の認証トークンのみを必要とするインデックスについては、「ユーザー名」としてトークンを提供し、パスワードは提供しないでください。

https://0123456789abcdef@pypi.company.com/simple

パーセントエンコーディングされた特殊文字

バージョン10.0で追加されました。

特定の特殊文字は、URLのクレデンシャル部分では無効です。ログイン資格情報のユーザーまたはパスワード部分にこれらの特殊文字が含まれている場合は、パーセントエンコードする必要があります。例として、ユーザー名がuser、パスワードがhe//oのユーザーがpypi.company.com/simpleにあるリポジトリにアクセスする場合、資格情報を含むURLは次のようになります。

https://user:he%2F%2Fo@pypi.company.com/simple

netrcサポート

pipは、ユーザーの.netrcファイルから資格情報をロードすることをサポートしています。URLに資格情報が含まれていない場合、pipはユーザーの.netrcファイルからURLのホスト名の認証資格情報を取得しようとします。この動作は、requestsの基盤となる使用に由来しており、これがPython標準ライブラリのnetrcモジュールに委譲します。

注意

netrcの標準ライブラリドキュメントで述べられているように、.netrcファイルではASCII文字のみが許可されています。空白文字と印刷不可能な文字はパスワードでは許可されていません。

以下は、ホストexample.comの、ユーザー名がdaniel、パスワードがqwertyの、.netrcの例です。

machine example.com
login daniel
password qwerty

.netrcファイル形式の詳細については、GNUのftp man ページを参照してください。

キーリングサポート

pipは、keyringライブラリを使用してキーリングに保存された資格情報の読み込みをサポートしています。これは、--keyring-providerautodisabledimport、またはsubprocessの値を渡すことで有効にできます。デフォルト値auto--no-inputを尊重し、このオプションが使用されている場合はキーリングをまったくクエリしません。それ以外の場合は、importsubprocess、およびdisabledプロバイダー(この順序で)を試して、動作する最初のプロバイダーを使用します。

pipのキーリングの使用法の構成

キーリングの構成はおそらくシステム全体であるため、その使用法を構成するより一般的な方法は、代わりに構成を使用することです。

参考

構成では、pipの構成がどのように機能するかについて説明しています。

$ pip config set --global global.keyring-provider subprocess

# A different user on the same system which has PYTHONPATH configured and and
# wanting to use keyring installed that way could then run
$ pip config set --user global.keyring-provider import

# For a specific virtual environment you might want to use disable it again
# because you will only be using PyPI and the private repo (and mirror)
# requires 2FA with a keycard and a pincode
$ pip config set --site global.index https://pypi.org/simple
$ pip config set --site global.keyring-provider disabled

# configuring it via environment variable is also possible
$ export PIP_KEYRING_PROVIDER=disabled

キーリングのPythonモジュールの使用

keyring-providerimportに設定すると、pipはPythonインターフェースを介してkeyringと通信します。

# install keyring from PyPI
$ pip install keyring --index-url https://pypi.org/simple
$ echo "your-password" | keyring set pypi.company.com your-username
$ pip install your-package --keyring-provider import --index-url https://pypi.company.com/

コマンドラインアプリケーションとしてのキーリングの使用

keyring-providersubprocessに設定すると、pipはPATHで見つかったkeyringコマンドを探して使用します。

このユースケースでは、keyringのコマンドラインインターフェースで必要となるため、URLにユーザー名を含める必要があります。以下の例、またはこのページの上部にある基本的なHTTP認証セクションを参照してください。

# Install keyring from PyPI using pipx, which we assume is installed properly
# you can also create a venv somewhere and add it to the PATH yourself instead
$ pipx install keyring --index-url https://pypi.org/simple

# For Azure DevOps, also install its keyring backend.
$ pipx inject keyring artifacts-keyring --index-url https://pypi.org/simple

# For Google Artifact Registry, also install and initialize its keyring backend.
$ pipx inject keyring keyrings.google-artifactregistry-auth --index-url https://pypi.org/simple
$ gcloud auth login

# Note that a username is required in the index URL.
$ pip install your-package --keyring-provider subprocess --index-url https://username@pypi.example.com/

ここにはドラゴンがいる

autoプロバイダーは保守的であり、--no-inputが使用されている場合は、キーリングがコンソールでユーザーにプロンプトを表示するなどのユーザーインタラクションを必要とする可能性があるため、キーリングをまったくクエリしません。サードパーティツールは頻繁にpipを呼び出し、適切に動作し、操作する情報が少ないため、実際に--no-inputを渡します。(キーリングには、ユーザー入力を必要としないバックエンドを要求するAPIがあります。)ただし、システムに関するより多くの情報があります!

auto(またはdisabled)以外のキーリングプロバイダーを要求することで、キーリングの使用を強制できます。importsubprocessを残しています。--keyring-provider import、または次のいずれかのメソッドを渡すことでこれを行います。

# via config file, possibly with --user, --global or --site
$ pip config set global.keyring-provider subprocess
# or via environment variable
$ export PIP_KEYRING_PROVIDER=import

警告

pipxやPipenvなどのツールがハングしているように見える可能性があるため、これを行う場合は注意が必要です。これらのツールは、pipを実行するサブプロセスからの出力を非表示にしながら、独自の進捗インジケーターを表示します。このような状況では、キーリングバックエンドがユーザー入力を待機しているかどうかはわかりません。

pipは保守的であり、--no-inputが使用されている場合は、キーリングがコンソールでユーザーにプロンプトを表示するなどのユーザーインタラクションを必要とする可能性があるため、キーリングをまったくクエリしません。--force-keyring、または次のいずれかを渡すことで、キーリングの使用を強制できます。

# possibly with --user, --global or --site
$ pip config set global.force-keyring true
# or
$ export PIP_FORCE_KEYRING=1

警告

pipxやPipenvなどのツールがハングしているように見える可能性があるため、これを行う場合は注意が必要です。これらのツールは、pipを実行するサブプロセスからの出力を非表示にしながら、独自の進捗インジケーターを表示します。このような状況では、キーリングバックエンドがユーザー入力を待機しているかどうかはわかりません。

keyring(Pythonパッケージ)はpipとは別にインストールする必要があることに注意してください。キーリングに保存された資格情報を使用してキーリングをダウンロードおよびインストールする必要がある場合は、ブートストラップの問題が発生する可能性があります。

したがって、pipのキーリングサポートを使用したいユーザーは、keyringをダウンロードしてインストールするための何らかのメカニズムを持っていることが予想されます。