dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[python]Buildout(zc.buildout)を触ってみる

pythonのライブラリ管理ツールとして知られるzc.buildoutを使ってみました。

zc.buildoutは引っかかる日本語の情報が少ないのですが、
こちらの記事が非常に参考になりました。(というかここだけでOK)

Buildout(zc.buildout)とは

本家サイト http://www.buildout.org/en/latest/

pythonベースのビルドシステム。

virtualenvだと、作成した環境ごとに必要に応じたパッケージを手動でインストール(pip install [package])しないといけませんが、
Buildoutだと設定ファイルに従って必要なパッケージを自動でインストールしてくれるそうな。

原理的には、PyPIやローカルにあるEggを組み合わせてアプリケーションを構築します。

Eggとは

  • Javaでいう.jarファイルのこと
  • pythonのパッケージファイルをまとめてzip化したファイル
  • 拡張子は.egg
  • 作成するにはsetup.pyが必要

やってみる

こんなチュートリアルもあるみたいなんですが

https://jacobian.org/2009/apr/15/django-apps-with-buildout/

一番上で紹介した記事を読み進めていくとチュートリアル的なものがあるので、それに従っていきます。

buildoutのインストール

buildoutのインストールには、2通りの方法があります。

  1. pipeasy_installなどのコマンドを使う
  2. bootstrap.pyをダウンロードし、実行する

1. の場合

インストールはこのコマンド一発で大丈夫です。

# pipの場合
$ pip install zc.buildout

インストール後、任意のディレクトリにてbuildout initコマンドを実行します。

$ buildout init

すると、以下のようなディレクトリが作成されます。

$ tree
.
├── bin
│   └── buildout
├── buildout.cfg
├── develop-eggs
│   └── zc.buildout.egg-link
├── eggs
│   └── setuptools-6.0.2-py2.7.egg
└── parts

2. の場合

macだとcurlコマンドを使ってbootstrap.pyをダウンロードしてきます。

$ curl -O "https://raw.githubusercontent.com/buildout/buildout/master/bootstrap/bootstrap.py"

注)
ネットで調べると次のようなURLで実行しているんですが、
このブログ執筆時点(2014/10/01)ではうまくいきませんでした。

# 本家サイトでもこう書いてる
$ wget http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py  
# または  
$ wget https://raw.github.com/buildout/buildout/master/bootstrap/bootstrap.py

このURLで実行すると、bootstrap.pyには以下のようになってました。

This document is located <a href="/zc.buildout/trunk/bootstrap/bootstrap.py?view=co">here</a>.

--------------注記ここまで--------------

実行すると、実行したディレクトリにbootstrap.pyというファイルが作成されます。

その後は一度空のbuildout.cfgファイルを作成してから、bootstrap.pyを実行します。

$ touch buildout.cfg
$ python bootstrap.py

実行すると、1. の時と同じディレクトリ群が作成されます。

buildout.cfgを設定、実行

buildout.cfgに以下のように記述してみます。

buildout.cfg

[buildout]
parts =
    codehl

[codehl]
recipe = zc.recipe.egg
eggs = 
    pygments

保存したらさっそく実行してみます。
binディレクトリの下のbuildoutというコマンドを実行します。

$ ./bin/buildout
Upgraded:
  setuptools version 5.6;
restarting.
Generated script '/Users/[ユーザ名]/workspace/python/buildout_sample/bin/buildout'.
Getting distribution for 'zc.recipe.egg>=2.0.0a3'.
Got zc.recipe.egg 2.0.1.
Installing codehl.
Getting distribution for 'pygments'.
Got Pygments 1.6.
Generated script '/Users/[ユーザ名]/workspace/python/buildout_sample/bin/pygmentize'.

(メッセージは人によって違うかも)

eggsディレクトリの下に新しいEggファイルがインストールされています。

(おまけ) インストールしたPygmentsを使ってみる

今回インストールしたPygmentsというパッケージはSyntax highlighterだそうなので、
何か適当にファイルを作って実行してみましょう。

sample.js

// This is test script
var i = 0,
    dict_sample = {
        'a': 'hoge',
        'b': 123
    };

./bin/pygmentizeコマンドを実行します。

実行結果

f:id:dackdive:20141002002003p:plain

とりあえずここまで!