Tag/Paste

Pasteとかeasy_installとか

easy_install の勉強しようと思ってた時に、 Pylons 触ってた時に使ってた Paste ってどうなんだろ?って思って、 分からないままにちょっと試してみたよ。

とりあえず Paste のインストール。 今回は PasteScript も必要なので、一緒にインストールする。

$ sudo easy_install Paste
$ sudo easy_install PasteScript

PasteScript をインストールした時に、 一緒に PasteDeploy も入ったけれども気にしない。 インストールが終ると paster なスクリプトが一緒にインストールされるので、 これを使って作業する。

まずは適当なディレクトリに移動して、 プロジェクトを作る。 pastercreate オプションを付けて実行すると、 新規作成の為に色々聞いてくるので、 流れにそって答えていく。

$ paster create
Selected and implied templates:
  PasteScript#basic_package  A basic setuptools-enabled package

Enter project name: myproject
Variables:
  egg:      myproject
  package:  myproject
  project:  myproject
Enter version (Version (like 0.1)) ['']: 0.1
Enter description (One-line description of the package) ['']: my first project
Enter long_description (Multi-line description (in reST)) ['']: my first project
Enter keywords (Space-separated keywords/tags) ['']: test
(省略)

出来たディレクトリの中を見てみると、 必要なものが一通り出来てるよ。 なので、このまま easy_install で叩いてもちゃんとインストール出来る。 中身を確認するために、オプションを指定してインストールしてみる。

$ sudo easy_install -UZ ./myproject
Processing myproject
Running setup.py -q bdist_egg --dist-dir /Users/nobu/tmp/myproject/egg-dist-tmp-GzZuQc
Adding myproject 0.1dev to easy-install.pth file

Installed /opt/local/lib/python2.5/site-packages/myproject-0.1dev-py2.5.egg
Processing dependencies for myproject==0.1dev
Finished processing dependencies for myproject==0.1dev

ちゃんとインストールされたか確認してみる。

>>> import myproject
>>> dir(myproject)
['__builtins__', '__doc__', '__file__', '__name__', '__path__']

ちゃんとインストールされてるよ!素晴し過ぎる! 何もしてないから、コレだけだと何も出来ないけども。

で、これだけだと全然面白くないので、 何か実際作ってみたいなぁ。なんて。 そこで思い付いたのが、 pateo さんが中心になってオープンソースで開発されている monologista のクライアントAPIの野良パッケージ! これを勝手に easy_install 出来るようにしてみる。

まずはプロジェクト作成から。 twitter のパッケージに合わせて、 python-monologista な名前にして paster で作成する。

$ paster create

で、中身を編集していく。 中を見てみるとこんな感じになってる。

$ cd python-monologista
$ ls
python_monologista.egg-info/ pythonmonologista/           setup.cfg                    setup.py

デフォルトで作られるソースの中身がディレクトリなんだけども、 今回の monologista のクライアントはファイル1枚なので、 ディレクトリは削除してしまって、ファイルに置き換えてしまう。

$ rm -rf ./pythonmonologista

肝心のファイルはと言うと、 monologista – Trac で公開されているので、 そこからありがたく拝借する。 が、ソースの管理に mercurial が使われていて、 ファイル1枚だけを落してくる方法が分らなかったので、 地味にコピペでファイルを作成。

そのあと、 python_monologista.egg-info の中にある SOURCES.txt を編集してつじつまを合わせる。

setup.cfg
setup.py
python_monologista.egg-info/PKG-INFO
python_monologista.egg-info/SOURCES.txt
python_monologista.egg-info/dependency_links.txt
python_monologista.egg-info/entry_points.txt
python_monologista.egg-info/not-zip-safe
python_monologista.egg-info/top_level.txt
monologista.py                  # <-- コレを足す
pythonmonologista/__init__.py   # <-- コレを消す

次に、同じく python_monologista.egg-info の中にある top_level.txt を編集。

monologista.py      # <-- コレを足す
pythonmonologista   # <-- コレを消す

ここまでで1度インストールしてみる。 ちょっとだけやる気をみせて、tarで固めてからのテスト。

$ sudo easy_install -UZ python-monologista.tgz
Processing python-monologista.tgz
Running python-monologista/setup.py -q bdist_egg --dist-dir /tmp/easy_install-XXgsgg/python-monologista/egg-dist-tmp-FKUCd7
warning: install_lib: 'build/lib' does not exist -- no Python modules to install
Adding python-monologista 0.1dev to easy-install.pth file

Installed /opt/local/lib/python2.5/site-packages/python_monologista-0.1dev-py2.5.egg
Processing dependencies for python-monologista==0.1dev
Finished processing dependencies for python-monologista==0.1dev

おお?なんかwarning吐いてるなぁ。 インストールするものが無いとか言われてる。 たしかにインストール先のディレクトリを見ても、 monologista.py が入ってない。

色々探してみると、 setup.py の中の setup に、 py_modules で指定して渡してやると良いらしい。

from setuptools import setup, find_packages
import sys, os

version = '0.1'

setup(name='python-monologista',
      version=version,
      py_modules=['monologista'],   # <-- コレを足す
      # (省略)
      )

これでもう1度インストールしてみる。

$ sudo easy_install -UZ pytthon-monologista.tgz

今度はwarning吐かずにインストール出来たよ! インストール先を見ても、ちゃんと monologista.py が入ってる! なので、早速シェルでインポートしてみる。

>>> from monologista import Api
>>> dir(Api)
['SHOW_URI',
 'TIMELINE_URI',
 'TODO_URI',
 'UPDATE_URI',
 '__class__',
 '__delattr__',
 '__dict__',
 '__doc__',
 '__getattribute__',
 '__hash__',
 '__init__',
 '__module__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__str__',
 '__weakref__',
 'get_url',
 'public_timeline',
 'update',
 'user_timeline',
 'validator']

おおお!出来たよ! かなり嬉し過ぎます!! 思わず声に出してガッツポーズ :-D (現在 5:00 AM)

これで monologista にAPIが実装されればスクリプトからゴニョゴニョ出来るね。 monologista の1.0がリリースが待ち遠しいね。

Paste とか PasteScript 以前に setuptools の事を良く理解出来てないので、 これを機会に真面目に勉強しようと思ったよ。 PastePasteScript を使う事で簡単にパッケージ化する方法を覚えて、 少しでも多くアウトプットしていけたら良いっすなぁ。

使ってるものを理解する事って大切だなぁ。って再確認出来た良い機会になりましたとさ。

Posted at: 
2008/03/09 05:17:45
4 Comments
1 TrackBack
Tags: 
Paste
Python
Trackback: 
http://humming.via-kitchen.com/2008/03/09/paste-and-easy_install/trackback/

Categories

Archives