はじめに
この記事では、PythonパッケージをPyPIに公開するまでの手順を説明します。
なお、setupスクリプトなどの設定ファイルの記述については、 別記事『PyPIパッケージ定義ファイル作成方法 - __init__.py setup.py MANIFEST.in の書き方』を書きました。こちらも合わせて、ご参照ください。
PyPI とは
PyPI は、 Python Package Index の略称で、Pythonパッケージ管理システムです。
PyPIに公開されているパッケージは、 pip
により簡単にインストール・管理できます。
Rubyプログラマなら RubyGems (gem)、PHPプログラマなら Composer、Perlプログラマなら CPAN と同じ仕組みといえば分かりやすいかと思います。
準備
PyPIアカウント登録
本番用、テスト用でそれぞれアカウントを登録します。
アカウント名は、あえて本番用・テスト用で変えておくと良いです。
(環境を間違えてログインすることを防げるからです)
-
PyPIアカウント登録フォームから登録します。
-
確認メールが届きます。
記載URLをクリックしてください。
Confirm registration
ページが開きます。 -
注意事項を確認して、
I agree
をチェックし、Confirm
ボタンを押します。 -
これでアカウント登録が完了しました。
アカウント認証ファイル(.pypirc)作成
Dropboxなどでアカウント情報を同期したいので、ここではシンボリックリンクを使う手順を記載します。
- 任意の場所に
pypirc
ファイルを作成
[distutils]
index-servers =
pypi
testpypi
[pypi]
repository: https://upload.pypi.org/legacy/
username: <本番用アカウント名>
password: <パスワード>
[testpypi]
repository: https://test.pypi.org/legacy/
username: <テスト用アカウント名>
password: <パスワード>
-
.pypirc
ファイルのシンボリックリンクを作成
$ ln -s pypircファイルの絶対パス ~/.pypirc
公開に必要なツール(wheel/twine)をインストール
$ pip install wheel twine
PyPIへの公開手順
setup.py を作成
別記事『PyPIパッケージ定義ファイル作成方法 - __init__.py setup.py MANIFEST.in の書き方』をご参照ください。
パッケージ作成
前回作成ファイルをクリーンアップ
必須ではありませんが、前回作成したソースコード配布物、パッケージに関するファイルを一度クリーンアップすることをお勧めします。
-
<パッケージ名>.egg-info
ディレクトリ
ソースコード配布物作成時の中間ファイルが書き出されるディレクトリです。
MANIFEST.in
から配布物に含めるファイルを削ったとき、それだけでは反映されず、同ディレクトリのファイルを一度削除してリセットする必要があります。 -
dist
ディレクトリ
パッケージファイルが書き出されるディレクトリです。
パッケージファイルは、同ディレクトリに追加作成されます。
PyPIに不要なファイルをアップロードしてしまわないよう、最初にファイル削除することをお勧めします。
$ rm -f -r <パッケージ名>.egg-info/* dist/*
ソースコード配布物を作成
$ python setup.py sdist
ライブラリのパッケージ作成
$ python setup.py bdist_wheel
※ python setup.py sdist bdist_wheel
とすれば2つ同時に作成できます。
ライブラリをPyPIにアップロード
いきなり本番アップロードしても良いですが、テスト環境にアップロードして事前チェックすることをお勧めします。
なお、PyPIは、同一バージョン番号で上書きアップロードできませんので、気をつけましょう。
テスト
- アップロード
$ twine upload --repository testpypi dist/*
- PyPIページでアップロードされたことを確認
https://test.pypi.org/project/<パッケージ名>/
- パッケージがインストールできることを確認
$ pip --no-cache-dir install --upgrade --index-url https://test.pypi.org/simple/ <パッケージ名>
本番アップロード
- アップロード
$ twine upload --repository pypi dist/*
- PyPIページでアップロードされたことを確認
https://pypi.org/project/<パッケージ名>/
- パッケージがインストールできることを確認
$ pip --no-cache-dir install --upgrade <パッケージ名>
注意点
-
PyPIへのアップロードには
twine
を使いましょう。
python setup.py register
,python setup.py sdist upload
は非推奨になっています。 -
PyPIは、同一バージョン番号で上書きアップロードできません。
ちょっとした修正でもバージョンを変更しなければならないので、気をつけましょう。
(PyPIのパッケージ編集ページでファイルを削除したり、プロジェクトそのものを削除しても変わらず、同一バージョンでは上書きできません)