のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

PyPIにコマンドとしてパッケージを登録するまで

AnsibleAWSコマンドラインインタフェース等、Pythonコマンドライン上で操作できるツールやライブラリは幾つかありますが、どのような仕組みでPyPIに登録するものなのかを調べてみました。

以下では、自作しているパッケージを中心に説明していきます。
使い方はまた別の記事に書く予定なので、今回はあくまでPyPIへの登録までの流れを記載していきます。

github.com

ディレクトリ構成

f:id:tatsu_tora:20170414115843p:plain

今回はbinディレクトリにコマンドラインスクリプトを格納します。

setup.py

パッケージのビルドや配布、インストール等の中心の動作となるスクリプトです。

setup(
        name="msgiver", # パッケージ名
        version="0.1.7.1", # バージョン
        url="https://github.com/kitaro-tn/msgiver", # パッケージのHP
        scripts=["bin/msgiver"],
        license="MIT",
        test_suite="msgiver",
        author="Tatsunori Nishikori",
        author_email="tora.1986.tatsu@gmail.com",
        description="msgiver will deliver the text to Messenger",
        long_description=readme,
        install_requires=install_requirements,
        packages=find_packages(exclude=("tests", "tests.*")),
        classifiers=[
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'License :: OSI Approved :: MIT License',
        ],
        # package_data={},
)

必須項目

  • name
  • version
  • url
  • author/maintainer
  • author_email/maintainer_email

依存パッケージ

requiresにArrayで依存パッケージを指定します。

long_description

PyPIのパッケージ上で表示される説明文で、Markdown形式は対応しておらず、reST形式で記述する必要があります。

reStructuredText入門 — Python製ドキュメンテーションビルダー、Sphinxの日本ユーザ会

scripts

コマンドライン上で実行可能なスクリプトのパスを指定することで、パッケージ内にスクリプトを含めることが出来ます。 スクリプト内で、作成したモジュールをimportして呼び出すことが可能で、ここで初めて、実際にユーザからコマンドラインとして扱うことが可能になります。

MANIFEST.in

マニフェストテンプレートと呼び、その他パッケージに必要なファイルを1行づつ記述します。

4. ソースコード配布物を作成する — Python 3.6.1 ドキュメント

その他詳しい設定項目は、下記ドキュメントを参照してください。

2. setup スクリプトを書く — Python 3.6.1 ドキュメント