LoginSignup
27
22

More than 5 years have passed since last update.

Python初心者が、PyPIに自作のパッケージを登録しようとしてハマったこと 2017年2月版

Last updated at Posted at 2017-02-09

 先日、初めて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名を書く

sample
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を登録すればいいそうです。

sample
# 古い方法
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」で全リストを収得してにらめっこしてください。

27
22
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
27
22