post Image
PyPIパッケージ公開手順

はじめに

この記事では、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アカウント登録

本番用、テスト用でそれぞれアカウントを登録します。
アカウント名は、あえて本番用・テスト用で変えておくと良いです。
(環境を間違えてログインすることを防げるからです)

  1. PyPIアカウント登録フォームから登録します。

  2. 確認メールが届きます。
    記載URLをクリックしてください。
    Confirm registration ページが開きます。

  3. 注意事項を確認して、 I agree をチェックし、 Confirm ボタンを押します。

  4. これでアカウント登録が完了しました。

アカウント認証ファイル(.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)をインストール

  • wheel : パッケージ作成に必要
  • twine : PyPIへのアップロードに必要
$ 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://testpypi.python.org/pypi/<パッケージ名>
  • パッケージがインストールできることを確認
$ pip --no-cache-dir install --upgrade --index-url https://test.pypi.org/simple/ <パッケージ名>

本番アップロード

  • アップロード
$ twine upload --repository pypi dist/*
  • PyPIページでアップロードされたことを確認
https://pypi.python.org/pypi/<パッケージ名>
  • パッケージがインストールできることを確認
$ pip --no-cache-dir install --upgrade <パッケージ名>

注意点

  • PyPIへのアップロードには twine を使いましょう。
    python setup.py register, python setup.py sdist upload は非推奨になっています。

  • PyPIは、同一バージョン番号で上書きアップロードできません。
    ちょっとした修正でもバージョンを変更しなければならないので、気をつけましょう。
    (PyPIのパッケージ編集ページでファイルを削除したり、プロジェクトそのものを削除しても変わらず、同一バージョンでは上書きできません)

関連記事

参考記事

Python公式ドキュメント

Qiita


『 Python 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。