Tag/Paste
Pasteとかeasy_installとか
easy_install の勉強しようと思ってた時に、 Pylons 触ってた時に使ってた Paste ってどうなんだろ?って思って、 分からないままにちょっと試してみたよ。
とりあえず Paste のインストール。 今回は PasteScript も必要なので、一緒にインストールする。
$ sudo easy_install Paste
$ sudo easy_install PasteScript
PasteScript をインストールした時に、 一緒に PasteDeploy も入ったけれども気にしない。 インストールが終ると paster なスクリプトが一緒にインストールされるので、 これを使って作業する。
まずは適当なディレクトリに移動して、 プロジェクトを作る。 paster に create オプションを付けて実行すると、 新規作成の為に色々聞いてくるので、 流れにそって答えていく。
$ 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']
おおお!出来たよ!
かなり嬉し過ぎます!!
思わず声に出してガッツポーズ
(現在 5:00 AM)
これで monologista にAPIが実装されればスクリプトからゴニョゴニョ出来るね。 monologista の1.0がリリースが待ち遠しいね。
Paste とか PasteScript 以前に setuptools の事を良く理解出来てないので、 これを機会に真面目に勉強しようと思ったよ。 Paste と PasteScript を使う事で簡単にパッケージ化する方法を覚えて、 少しでも多くアウトプットしていけたら良いっすなぁ。
使ってるものを理解する事って大切だなぁ。って再確認出来た良い機会になりましたとさ。
- Posted at:
- 2008/03/09 05:17:45
- 4 Comments
- 1 TrackBack
- Trackback:
- http://humming.via-kitchen.com/2008/03/09/paste-and-easy_install/trackback/