モジュールを作成し PyPI で公開してみた

Python ゾーンを目指してまっしぐら、ソメダです。こんばんわ。さて、表題の通り、ちょっくら Python のコードでも書いてみて、いっちょ公開してみるか、という気持ちになった時に何をすれば良いのか、をまとめておきます。PyPI っていうのは、JavaMavenPerlCPAN みたいなものですね。

ともあれ、まずはチュートリアルの内容を大づかみです。

Package Index からインストールする方法

公開の前に、まずインストール方法から確認。

  1. distutils を使ってインストール (ダウンロードして setup.py を実行)
  2. easy_install を使ってインストール (setuptools を利用)
  3. Buildout を使ってインストール

setup.py とか easy_install はよく出会いますね。Buildout は未体験。

Package Index で保存するもの

Maven レポジトリとは違い、PyPI では

  1. パッケージのメタデータ
  2. パッケージのソース及びバイナリの配布物

のどちらでも配備することができます。

メタデータを配備する場合には、以下の三つのオプションが、

  1. setup.py register でアップロードする
  2. PKG-INFO ファイルを手で書く
  3. web のフォームから入力

そして、ソース及びバイナリを配備する場合には、以下の二つのオプションが

  1. setup.py sdist もしくは bdist の際に upload オプション付きで実行
  2. web のフォームからアップロード

あるとのことです。

今回やった事

ソースやダウンロードは google code で一括管理したかったので、

  1. 配備するのはメタデータ
  2. setup.py register でメタデータを更新

という方針にしました。手順としては、

  1. PyPI - the Python Package Index : Python Package Index でユーザ作成
  2. setup.py を作成
  3. setup.py sdist で配布物を作成後 google code へアップ
  4. setup.py regsister を実行

です。setup.py は setup.py の書き方を見ながら準備します。最初、良く分からなかったのは、Classifier の項目なのですが、これはここを参考にしたり、似たようなライブラリ見つけてその内容をパクリました。最終的に出来上がった setup.py はこんな感じです。以下抜粋。

setup(
      name = "backloglib",
      version = "0.1.1",
      author = "Takashi Someda",
      author_email = "someda@isenshi.com",
      url = "http://code.google.com/p/backloglib/",
      download_url = "http://backloglib.googlecode.com/files/backloglib-0.1.1.tar.gz",
      description = "Backlog client library",
      long_description ="",
      platforms = "any",      
      packages=['backloglib'],
      package_dir={"backloglib":"src/backloglib"},
      keywords = "backlog client",
      classifiers = [
                     "Operating System :: OS Independent",
                     "Environment :: Console",
                     "Programming Language :: Python",
                     "License :: OSI Approved :: Apache Software License",
                     "Development Status :: 2 - Pre-Alpha",
                     "Intended Audience :: Developers",
                     "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries",
                     "Topic :: Software Development :: Libraries :: Python Modules",
                     "Topic :: Utilities" 
                     ]
      )

出来れば、自分用のプライベートレポジトリを建ててみる所までやりたかったのですが、シルバーウィークではそこまで出来ず。その辺りの情報はこちらにあります。

backloglib 0.1.1 公開しました

という事で、プライベートでも利用している(フリー版ですが ^^;) BacklogPython クライアントライブラリを書いてみたので、公開しました。

ドキュメント見て頂けたら一目瞭然なのですが、モノは Backlog APIXML-RPC のコールをラップして、Python オブジェクトに変換するだけのシンプルなものです。最初は Backlog オブジェクトから階層的に Project オブジェクト読んだり、そこから Issue とったりするのが良いかと思っていたのですが、存外クライアント書く時にはプロジェクト決まってたりする事多いだろうし、意外に XML-RPC のラップくらいがシンプルさ加減でも良いのでは、と思いこの形にしました。