k-holyのPHPとか諸々メモ

Webで働くk-holyがPHP(スクリプト言語)とか諸々のことをメモしていきます。ソースコードはだいたいWindowsで動かしてます。

Windows7 (MinGW / MSYS) に virtualenvwrapper を入れたメモ

Windows7 (MinGW / MSYS) に Python 2.7 + virtualenv + Fabric を入れたメモ の続き。

cmd.exe で virtualenv できるようになりましたが、virtualenvに拡張機能を提供する virtualenvwrapperMinGW / MSYS でも使えるようなので、これを入れてみたメモです。

以下、コマンドは MSYS のシェルにて。

virtualenvwrapper をインストール

virtualenv と同様に easy_install で入れます。

[k_horii@horii ~]$ /c/Python27/Scripts/easy_install virtualenvwrapper
Searching for virtualenvwrapper
Reading http://pypi.python.org/simple/virtualenvwrapper/
Reading http://www.doughellmann.com/projects/virtualenvwrapper/
Best match: virtualenvwrapper 3.7.1
Downloading http://pypi.python.org/packages/source/v/virtualenvwrapper/virtualenvwrapper-3.7.1.tar.gz#md5=17fd8cfe4ef7f569f62f2f3453e3bc02
…中略…
Installed c:\python27\lib\site-packages\virtualenvwrapper-3.7.1-py2.7.egg
…中略…
Installed c:\python27\lib\site-packages\stevedore-0.8-py2.7.egg
…中略…
Installed c:\python27\lib\site-packages\virtualenv_clone-0.2.4-py2.7.egg
Finished processing dependencies for virtualenvwrapper

依存ライブラリと一緒にインストールされました。

こちらを参考に .bashrc に設定を追加します。dhellmann / virtualenvwrapper / source / docs / ja / install.rst — Bitbucket

今後のため、ついでにPythonの関連ディレクトリにもパスを通しておきます。

~/.bashrc

export PATH=/c/Python27:/c/Python27/Scripts:$PATH
export WORKON_HOME=$HOME/.virtualenvs
export MSYS_HOME=/c/MinGW/msys/1.0
source /c/Python27/Scripts/virtualenvwrapper.sh

反映させて…

[k_horii@horii ~]$ source ~/.bashrc

mkvirtualenv コマンドで仮想環境を作成

[k_horii@horii ~]$ mkvirtualenv oppy
New python executable in oppy\Scripts\python.exe
Installing setuptools.................done.
Installing pip...................done.
(oppy)[k_horii@horii ~]$

プロンプトが変わりました。

(oppy)[k_horii@horii ~]$ ls ~/.virtualenvs/oppy
Include/  Lib/  Scripts/

$WORKON_HOME/仮想環境名 に仮想環境が作成されています。

引数なしの workon コマンドで環境を一覧表示。

[k_horii@horii ~]$ workon
oppy

workon 仮想環境名 で切替えられます。

[k_horii@horii ~]$ workon oppy
(oppy)[k_horii@horii ~]$

前回と同様、仮想環境ディレクトリ内の Lib/distutils/distutils.cfg に MinGW でコンパイルさせるための設定を追加します。

(oppy)[k_horii@horii ~]$ echo -e "\n[build]\ncompiler=mingw32\n" >> $WORKON_HOME/oppy/Lib/distutils/distutils.cfg

直接パスを指定して、Pywin32 を入れます。

(oppy)[k_horii@horii ~]$ easy_install ~/Python/pywin32-218.win32-py2.7.exe

Fabric を入れます。

(oppy)[k_horii@horii ~]$ pip install fabric
…中略…
(oppy)[k_horii@horii ~]$ fab --version
Fabric 1.6.0
Paramiko 1.10.1

OKです。

virtualenvwrapper の日本語版ドキュメントがこちらにありました。virtualenvwrapper 3.5 — virtualenvwrapper 3.5 documentation

仮想環境の作成時にフックスクリプトを実行する

ユーザカスタマイズ — virtualenvwrapper 3.5 documentation によれば、仮想環境を作成する際 $WORKON_HOME 直下に決められたファイル名で配置したフックスクリプトを実行できるようです。

前述の Lib/distutils/distutils.cfg への追記は premkvirtualenv フック(仮想環境が作成された後、環境が切り替わる前に実行される。引数は新しい環境名)に書けば良いでしょうか。

試しに書いてみます。

~/.virtualenvs/premkvirtualenv

#!/bin/sh
# This hook is run after a new virtualenv is created and before it is activated.

echo -e "\n[build]\ncompiler=mingw32\n" >> $WORKON_HOME/$1/Lib/distutils/distutils.cfg

これでいけるはず…新たな仮想環境 chippy を作成してみます。

$ mkvirtualenv chippy
…中略…
(chippy)[k_horii@horii ~]$ cat $WORKON_HOME/chippy/Lib/distutils/distutils.cfg
# This is a config file local to this virtualenv installation
# You may include options that will be used by all distutils commands,
# and by easy_install.  For instance:
#
#   [easy_install]
#   find_links = http://mylocalsite

[build]
compiler=mingw32

うまくいきました。

Pywin32 のインストールは postmkvirtualenv フック(新しい環境が作成されてアクティブ化された後で読み込まれる)に書けば良いでしょうか。

Tips を見ると「新しい環境に共通ツールを自動的にインストールする」という項目がありました。

Tips とトリック — virtualenvwrapper 3.5 documentation

私はこの postmkvirtualenv を基本的なセットアップを行うインストールに使用します。

$ cat postmkvirtualenv
#!/usr/bin/env bash
curl -O http://python-distribute.org/distribute_setup.p... />python distribute_setup.py
rm distribute_setup.py
easy_install pip==dev
pip install Mercurial

上記の例にあるように easy_install や pip コマンドも実行できるようです。

~/.virtualenvs/postmkvirtualenv

#!/bin/sh
# This hook is run after a new virtualenv is created and before it is activated.

easy_install ~/Python/pywin32-218.win32-py2.7.exe
pip install fabric

一旦削除して…

(chippy)[k_horii@horii ~]$ deactivate && rmvirtualenv chippy
Removing chippy...

作りなおしてみます。

$ mkvirtualenv chippy
…中略…
Successfully installed fabric paramiko pycrypto
Cleaning up...
(chippy)[k_horii@horii ~]$ fab --version
Fabric 1.6.0
Paramiko 1.10.1

ちょっと、いや、かなり時間はかかりますが、仮想環境を作成するたびに Fabric がインストールされるようになりました。

ここまでやっといてアレですけど、当初の目的(PHPでWebからfabコマンド実行)を考えても PyWin32 と Fabric は素直に実環境に入れた方がいいような気がしてきました…。

まあローカルでの実行環境をどうするかはおいといて、一応 Windows7 (MinGW/MSYS) でも Fabric が使えるようになりましたので、今まで原始的なコピー&ペーストで行っていた諸作業を、どんどん自動化してみようと思います。