ChefのCookBookで、virtualenvを使えるようにする
poise/python · GitHub を使ってPython環境を作ると、自作のCookBookでpipやvirtualenvが使えるようになります。
poise/python · GitHub で は、Pythonのインストール、pipのインストール、virtualenvのインストールを行います。
インストールする場合はbuild-essentialが必要になります。
また、Redhat系の環境にパッケージでインストールするの場合はyumも必要になります。
インストール方法
recipesのdefault.rbを見ると、他のrecipeをincludeしているので、特に何も指定しなくてもpythonのインストール、pipのインストール、virtualenvのインストールが実行されることがわかります。
include_recipe "python::#{node['python']['install_method']}" include_recipe "python::pip" include_recipe "python::virtualenv"
パッケージインストールの場合は、run_listにpythonを追加するだけです。 chef-soloだったら、/tmp/vagrant-chef-1/dna.jsonなどに設定。
{ "run_list" : [ "recipe[python]" ] }
ソースコードからインストールする場合には、environmentなどに、install_methodとversionを指定します(他にもcheck_sumなども指定できます)。 以下はchef-soloでの設定例です。
{ "python" : { "install_method" : "source", "version" : "2.7.5" }, "run_list": [ "recipe[python]" ] }
ソースコードからインストールする場合には、versionはソースコードを取得する先もある程度指定できます。
remote_file "#{Chef::Config[:file_cache_path]}/Python-#{version}.tar.bz2" do source "#{node['python']['url']}/#{version}/Python-#{version}.tar.bz2" checksum node['python']['checksum'] mode "0644" not_if { ::File.exists?(install_path) } end
recipes/source.rb を確認するとわかりますが、拡張子(.tar.bz2)の部分が固定なので、tar.bz2が無い場合にはエラーになってしまうので注意が必要です。
2.7.6は拡張子(.tar.bz2)のものが無いので、現時点ではエラーになりました。
pipやvirtualenvの使い方
pipの使い方は、virtualenvのrecipeを見ればわかるかと思います。
python_pip "virtualenv" do action :install end
virtualenvとpipを使ってFlaskをインストールには、次のようなレシピを作って実行すればOKです。
include_recipe "python::pip" include_recipe "python::virtualenv" python_virtualenv "/home/vagrant/apps" do action :create owner "vagrant" group "vagrant" end python_pip "Flask" do action :install virtualenv "/home/vagrant/apps" end
確認してみると、インストールされていることがわかります。
vagrant@vagrant-ubuntu:~$source ./apps/bin/activate (apps)vagrant@vagrant-ubuntu:~$ pip list argparse (1.2.1) Flask (0.10.1) itsdangerous (0.23) Jinja2 (2.7.1) MarkupSafe (0.18) pip (1.4.1) setuptools (0.9.8) Werkzeug (0.9.4) wsgiref (0.1.2)