3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PyPIへの登録にユーザー名とパスワードを使うのはやめよう。APIトークンを使おう

Posted at

はじめに

PyPI へパッケージを登録する記事を見ているとユーザー名とパスワードを渡す例が多く散見されました。

それは古いやり方なのでやめてください。

最近のPyPIはセキュリティにも力を入れており、APIトークンの仕組みを持っています。

PyPI now supports uploading via API token

一般に、この手のAPIの認証にはユーザー名/パスワードを使うよりAPIトークンを使う方がセキュアに運用できると言われています。

この記事ではPyPIへの登録時に、ユーザー名/パスワードではなくAPIトークンを使う方法を紹介します。

PyPIでAPIトークンを作成する

はじめに、PyPIでAPIトークンを作成します。

  1. PyPIにログインする
  2. Add API token のページで Token nameScope を埋めた後 Add Token ボタンを押下する
    • Token name: 好きな値を入れてください
    • Scope: すでにパッケージプロジェクトが登録済みの場合は Project: <パッケージ名> が選択できます。Entire account (all projects) という選択肢も表示されますがこれは全プロジェクトで有効なAPIトークンなのでセキュリティの観点からはおすすめしません
      スクリーンショット 2021-01-04 14.03.37.png
  3. 結果生成されたpypi- から始まる長い英数字列がAPIトークンとなります( pypi- もAPIトークンの一部です)。これをメモ帳などにコピペしておいてください
    スクリーンショット 2021-01-04 14.02.38.png

PyPIにAPIトークンを使って登録する

つぎに、PyPIに、APIトークンを使ってパッケージを登録します。

PyPIへの登録サーバーは依然としてユーザー名/パスワード型のインターフェースしか用意されていませんが、登録サーバーは ユーザー名欄に固定値 __token__ を指定すると、パスワード欄の値をAPIトークンだと認識するようになります

最近はPyPIへの登録には twine そのものを使うよりも PoetryPyflow といったパッケージマネージャーを使う方が主流です。
ここでは使ったことのある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トークン>"

おわりに

以上です。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?