先日、初めてPyPIに自作のパッケージを登録したときに苦労した内容を紹介します。
ハマった点を先に挙げておくと、twineを使う必要がある、パッケージ名は適当ではだめ、です。
当初、PyPIにパッケージを登録する方法を検索して調べたところ、多くのブログや記事で以下の手順が紹介されていました。
no | work | 参考 url/command |
---|---|---|
1 | ソースコード作成 | |
2 | フォルダ構成を整える | Python: 自作パッケージにデータファイルを含める |
3 | setup.pyを作成 | PyPIデビューしたい人の為のPyPI登録の手順 |
4 | ディストリビューション構築 | >>python setup.py sdist |
5 | テストインストール | >>python setup.py install |
6 | test用のPyPIにアカウントを作成 | 登録先 |
7 | .pypircを作成 | PyPIにパッケージ登録する |
8 | パッケージ名を登録 | >>python setup.py register -r pypitest |
9 | パッケージをアップロード | >>python setup.py sdist upload -r pypitest |
10 | 本番用のPyPIにアカウントを作成 | 登録先 |
11 | パッケージ名を登録 | >>twine register dist/* |
12 | パッケージをアップロード | >>twine upload dist/* |
13 | テストインストール | >>pip install パッケージ名 |
twine、test用PyPi、「.pypirc」関連を補足しておきます。
・test用PyPiと本番用PyPiは、別々にアカウントを作成する必要があります。
・「.pypirc」は twineを使う場合は必要です。
・Windowsの場合、「.pypirc」を置く場所は環境変数で指定した場所(HOMEPATH=\Users\foo なら c:\Users\foo\.pypirc)
・「.pypirc」でserverを定義している場合、python setup.py -r のurl指定では、「.pypirc」で定義したserver名を書く
file:.pypirc
[distutils]
index-servers =
pypi
pypitest
[pypi]
repository: https://pypi.python.org/pypi
username: worst
password: Salary_burglar
[pypitest]
repository: https://testpypi.python.org/pypi
username: learner
password: Being_late
# server定義がpypitestなら以下のように指定
>>python setup.py register -r pypitest
>>python setup.py sdist upload -r pypitest
##ハマったところ その1
test用のPyPIに登録するところまでは、すんなりいきました。Python歴が長い人ならば5分とかからないでしょう。
PyPIの本番サーバーにパッケージ名を登録するところで、下記のエラーが出て止まりました。
Server response (410): This API is no longer supported, instead simply upload the file.
これは、python setup.py register ではなく、twine を使用するか、以下のurlで、直接PKG-INFOを登録すればいいそうです。
# 古い方法
python setup.py register
python setup.py sdist upload
# 新しい方法
pip install twine # 必要ならインストール
twine register dist/*
twine upload dist/*
この方法が推奨(no longer supportedだから今は必須)になったのが2014年ごろ?で、2014年までの記事には古いやり方で紹介されています。
そしてtest用PyPiでは古い方法で登録できてしまうのに、本番用のPyPiでは、新しい方法でないと登録できないのが、一番ハマりやすいところですね orz
##ハマったところ その2
こちらは単純です。
登録しようとしていたパッケージ名は、すでに他の方が使用されていました。
レスポンスで、指定できないとあるのを、すでに使用されていますだったらすぐに気がついたんですが・・・とは後の祭りです。
使用済みの名前でWEBでPKG-INFOを登録しようとすると、以下のresponseが返ってきます。
Forbidden
You are not allowed to store 'picker' package information
twineを使用すると、以下のメッセージが出ます。
HTTPError: 403 Client Error: You are not allowed to edit 'picker' package information for url: https://pypi.python.org/pypi
バッティングの確認は、PyPiのサイトで検索して確認するか、
「pip search 使用したい名前」で検索しましょう。
どれもとられていたら、「pip search * > list.txt」で全リストを収得してにらめっこしてください。