年が変わる前に書いておこう。
12月になって、PyPI にパッケージを2つ公開した。
以前にもパッケージを公開したことはあるんだけど、PyPI で検索したら2020年10月で、「試しにやってみた」程度のものだった。このときはたぶん Poetry 使ってない。
で、今回は poetry publish
コマンドで公開する手順を調べながらやったので、そのメモとして残しておく。
前提
- PyPI (と Test PyPI)にアカウントを持っていること
- pyproject.toml が適切に記述されていること
APIトークンの作成
Poetry を使ってパッケージを公開する前に、PyPI と Test PyPI のAPI トークンを作っておく必要がある。
PyPI にログインして、アカウント設定のページに「API トークン」というセクションがある。ここで「トークンの追加」をクリックして作る。詳細は省略。難しいことはないのでやればわかる。
ただし、作成されたトークンは一度しか表示されないので、コピペして保存しておく。
Test PyPI でも同様に作成しておく。
Poetry の設定
必要な設定は、公開先のリポジトリとその API トークンの登録だ。PyPI はデフォルトで登録されているので、Test PyPI をリポジトリとして登録する。
takatoh@apostrophe:~$ poetry config repositories.testpypi https://test.pypi.org/legacy/
Test PyPI を testpypi という名前で登録した。
つぎは先に作成しておいた API トークンを登録する。これは PyPI、Test PyPI の両方に必要。
takatoh@apostrophe:~$ pyetry config pypi-token.pypi "PyPIのAPIトークン"
takatoh@apostrophe:~$ pyetry config pypi-token.testpypi "Test PyPIのAPIトークン"
これでパッケージを公開する準備は完了
パッケージの公開
プロジェクトのルートディレクトリで、poetry publish
コマンドを実行する。-r
/ --repository
オプションでリポジトリを指定(指定しないと PyPI に公開)。
Test PyPI に公開する場合:
takatoh@apostrophe:~$ pyetry publish -r testpypi
PyPI に公開する場合:
takatoh@apostrophe:~$ pyetry publish
これで無事公開できた。
プライベートリポジトリに公開する場合
ローカルネットワークに、pypiserver を利用してプライベートなリポジトリ(http://pypilocal/)を作ってあるので、そこにも公開できるように、リポジトリ登録する。
takatoh@apostrophe:~$ poetry config repositories.pypilocal https://pypilocal/
ユーザー認証はしてないからリポジトリの登録だけすればいい。
ただ、ちょっと URL でハマった。pip
でこのリポジトリからインストールするには、リポジトリの URL に “http://pypilocal/simple” を指定する。だけど、パッケージ公開用には上のように “http://pypilocal/” だけを設定する。 “simple” をつけてはいけない。Test PyPI では “legacy” がついてたので、こっちも必要なのかと思ったけど違った。
pypilocal に公開するには -r
オプションで指定してやればいい。
takatoh@apostrophe:~$ pyetry publish -r pypilocal
おしまい。