Python で Rake を真似るとしたら


Python でも distutils を使うと Rake みたいなことができるよという話。

でも distutils って、依存性を解決してくれたっけ? たとえばタスク A を実行するためにはタスク B と C を先に実行しなければいけない、というような依存関係。これができないと、distutils は Rake のかわりにはならない。せいぜい shell script のかわりという程度。

しかし、Rake のような DSL を使うと、Ruby のブロック構文が実によくできていることに感心する。ほんと、ブロック構文がなければ Rake は生まれなかったであろう。

これを Python で真似するにはどうしたらいいか。あんまりいいアイデアはないけど、「@hogehoge」を使った修飾子を使えばなんとかなるのかな。

@task('compile')
@desc('compile *.c into *.o')
@target('%.o')
@depends('%.c')
def compile(files):
    os.system("gcc %s" % files[0])


あんまり格好よくないな。Python の def は拡張できないけど、Ruby のブロック構文は自分で関数を定義すればあたかも専用の構文を用意したように使える。RubyDSL に向くのはブロック構文サマサマだよな。