11 July 2010

python hack-a-thon 2010.7

f:id:cou929_la:20100710160819j:image

Python Hack-a-thon 2010.07 : ATND

いってきました.

まずは中級コースのハンズオンに参加. 内容はpythonの仮想環境の構築(virtualenv), パッケージング(setuptools), cpan的なパッケージのrepoへの登録(pypi), ビルド自動化(buildout)のはなしでした.

Dropbox - 404

Virturalenv

virtualenv 15.1.0 : Python Package Index

  • python の仮想環境をつくる
  • どこにでもつくれるのでroot権限がないときでもok
  • マシンの大本の環境と切り分けられるので, 設定値やライブラリなどどれだけ変えたりインストールしても大丈夫
    • easy_installはアンイストール機能がないし, これは便利
  • そのぶんディスクは食う
  • ひとつのディレクトリ下にすべてはいるので, いらなくなったらそれだけ捨てればok

setuptools

PEAK - The Python Enterprise Application Kit

  • パッケージング
  • これでパッケージングしとくと easy_install でインストールできるようにしたりできる.
  • もうほぼメンテされてないらしく, distributeという互換パッケージが開発されている
quick start

こういうsetup.pyを書いて,

#from distutils.core import setup
from setuptools import setup

setup(
    name = 'foo',
    version = '0.0.1',
)

あとはコマンドひとつでパッケージが作られる.

// ソース配布
$ python setup.py sdist

// バイナリ配布
$ python setup.py bdist

// egg
$ python setup.py bdist_egg
pluginをつくる
  • pythonでplugin的なことをしたい
    • __import__
    • imp
    • setuptools
  • setuptools使えばPyPIやbuildbot対応も視野に入っていいかんじ
  • pluginのサンプル
  • さっきのように setup.py を定義して, パッケージを作っているようだ
  • pluginのサンプル(egg編)
  • egg 形式でパッケージングして, それををインストールしている
  • plugin 側のコードはさっきのサンプルと全く同じ
  • server.py (pluginを使う側) のコードを少しかえてて, あるディレクトリにプラグインファイル(今回はegg)をいれるだけで自動認識するようにしている.
  • こっちの方法だとあるプロジェクトのディレクトリにあるプラグイン(egg)をいれて, それを読んでるだけで, システムにプラグインをインストールしたわけではない

distribute

  • virtualenvで -distribute オプションをつけると distribute が使われる
  • あとからソースからいれることももちろんできる

PyPI

$ python setup.py register
  • id, pass は ~/pypirc に保存される.
    • セキュリティ的に気になるけど, この方法がベターらしい
  • 必要なメタ情報はすべてsetup.pyへ
  • python setup.py uplod するだけでpypiへあがる
    • 簡単に登録されちゃうのでわりと変なパッケージも多い

buildout

  • pythonベースのビルドシステム
    • 当然pythonでかかれてないプロジェクトでもok
  • buildout.cfg にルールを書く
    • 必要なモジュールをただ列挙するだけでいいのでかなり楽
  • buildoutは基本的に元の環境に追加するので, 仮想環境上でビルドしたい場合はvirtualenv上でbuildoutを走らせるといい
  • 内部的にはeasy_installを使っているが, pipやdistribute, あるいは他のパッケージシステムも使用できる.

感想

pythonは環境がすごく整ってるなと思ったいました(こういうツールが揃っているのもそうだけど, こうしたチュートリアルやハンズオンが行われているという意味でも). この手のツールはいろんな言語でたくさんあるので, なにかひとつ自分の手に馴染むものをもっておくと応用が効きやすいのかなと考えてます.


ハンズオンのあとはのんびりxulいじり. その後は発表タイムだったのですが, 彗星のようにあらわれた魚拓の中の人がおもしろすぎました. 方向性はべつですが[twitter:camlspotter]さんのOCamlというか関数型言語の話も面白かったです. オブジェクト指向なんて複雑なことができているんだから関数型言語なんて簡単にできるはずだ!

次回のatndも作成されているんですが, 11月の予定にもかかわらず既に半分以上うまっていてすごい人気です.

Python Hack-a-thon 2010.11 : ATND

終了後は8人くらいで飲み会へ. いろんな会社のいろんなことが聞けてとても興味深かったです.

非常に楽しく, 勉強になりました. お疲れ様でした!