はじめに
PyPI へパッケージを登録する記事を見ているとユーザー名とパスワードを渡す例が多く散見されました。
それは古いやり方なのでやめてください。
最近のPyPIはセキュリティにも力を入れており、APIトークンの仕組みを持っています。
PyPI now supports uploading via API token
一般に、この手のAPIの認証にはユーザー名/パスワードを使うよりAPIトークンを使う方がセキュアに運用できると言われています。
この記事ではPyPIへの登録時に、ユーザー名/パスワードではなくAPIトークンを使う方法を紹介します。
PyPIでAPIトークンを作成する
はじめに、PyPIでAPIトークンを作成します。
- PyPIにログインする
-
Add API token のページで
Token name
とScope
を埋めた後Add Token
ボタンを押下する - 結果生成された
pypi-
から始まる長い英数字列がAPIトークンとなります(pypi-
もAPIトークンの一部です)。これをメモ帳などにコピペしておいてください
PyPIにAPIトークンを使って登録する
つぎに、PyPIに、APIトークンを使ってパッケージを登録します。
PyPIへの登録サーバーは依然としてユーザー名/パスワード型のインターフェースしか用意されていませんが、登録サーバーは ユーザー名欄に固定値 __token__
を指定すると、パスワード欄の値をAPIトークンだと認識するようになります 。
最近はPyPIへの登録には twine そのものを使うよりも Poetry や Pyflow といったパッケージマネージャーを使う方が主流です。
ここでは使ったことのあるPoetryとtwineのやり方を記載しますが、twineでもPoetryでもPyflowでもユーザー名に __token__
を指定し、パスワードにAPIトークンを指定するのは変わりません。
CLI上でAPIトークンを指定する方法のみ紹介しています。
どちらの場合も設定ファイルに記載しておく方法は存在しますが、git等のファイル管理システムに管理下に(誤って)入ってしまいAPIトークンが外部に晒されてしまう可能性があるので紹介しません。
ファイル管理でやりたい場合は各自検索してみてください。
PoetryでPyPIにAPIトークンを使って登録する
poetry publish --build -u "__token__" -p "<APIトークン>"
TwineでPyPIにAPIトークンを使って登録する
twine upload -u "__token__" -p "<APIトークン>"
おわりに
以上です。