Windows環境下でもVirtualenvWrapperを使う


とても便利なvirtualenvwrapperですが、なぜかWindowsには対応していません。

MSYS下なら動かせないこともないのですが、PythonがMSYS環境であまり良い挙動を取りません。

どうしたら良いものか調べていたらPowerShell2で動かすことができる

virtualenvwrapper-powershell

というものを見つけました。

なにやらvirtualenvwrapperをPowerShellスクリプト用に再実装したものみたいです。

ということで

使えるところまで準備していこうかと思います。

前提条件としてPowerShell(Win7はビルトイン)とvirtualenvはインストール済みとします。

なお、私はPS初心者です。なのでPSの環境を一から作るところから始めます。ご了承ください。

1. PSスクリプトを使えるようにする。

まず、PSでPSスクリプトを使えるようにしなくてはいけません。

PSを管理者権限で起動します。

> Get-ExecutionPolicy

と実行すると「Restricted」 「AllSigned」 「RemoteSigned」 「Unrestricted」のいずれかが出力されるかと思います。

  1. Restrictedはすべてのスクリプトの実行を禁止している状態
  2. AllSignedは署名済みスクリプトのみ実行可能な状態
  3. RemoteSignedはローカルに保存されているスクリプト、ダウンロードされた署名済みスクリプトが実行可能な状態
  4. Unrestrictedはすべて実行可能な状態

という感じです。

デフォルトだと1だと思います。これを3の状態に変更します。

> Set-ExecutionPolicy RemoteSigned

こうすることで、PSスクリプトを実行できる状態になりました。

PSを一旦終了します。

※なお、この状態変更時に管理者権限がないとエラーを吐きます。そのために最初に管理者権限で実行するようにしました。

2. PS環境の作成

PSを起動します。

> $profile

を実行すると、PS起動時に読み込むプロファイルのパスが出力されます。

設定していない場合パスに書かれているファイルが作成されていないので、

> New-Item -type file -force $profile

を実行してあげると空のファイルがパスに作成されます。

これをエディタで編集すれば、起動時にいろいろできるそうです。bashrcとかそのへんを浮かべればよいかと思います。

これを現在のセッションで有効にしてあげます。 今のところ空ファイルですけどね^^;

> . $profile

unix系だと source .hoge というのと同じ要領かと思います。

PSを終了します。

3.  virtualenvwrapper-powershellをインストールする。

スクリプトをダウンロードしてきましょう。 pipやeasy_installではダメ

解凍したらPS起動します。

> cd \Bin

> .\Setup.ps1

と実行します。

「virtualenvwrapper: Installation complete.」となれば、2で作成されたプロファイルのあるディレクトリに

「Modules」というディレクトリが作成され、virtualenvwrapper-powershellがインストールされたと思います。

PSを終了します。

4. virtualenvwrapper-powershell用の設定を行います。

せっかくプロファイルを作成したので、これを元に設定していきたいと思います。

エディタで2で作成したプロファイルを開きましょう。

まずはvirtualenvwrapperで使用するディレクトリを設定します。

$WORKON_HOME = “$HOME\.virtualenvs”

Homeディレクトリ+「.virtualenvs」というディレクトリパスを指定しました。

これを環境変数に代入します。

$env:WORKON_HOME = $WORKON_HOME

VirtualEnvWrapperをロードさせます。

$virtualenv_module_path = “$profile\..\Modules\VirtualEnvWrapper”
Import-Module $virtualenv_module_path

最終的にプロファイルの中身は以下のようになりました。

$WORKON_HOMEがない場合、それを作成するように処理を追加しました。

> . $profile

を実行しプロファイルを読み込ませます。

これで設定は終了です。

5. 実際に使ってみる。

> mkvirtualenv test

$HOME_WORKON以下にもろもろのファイルができていれば完了です。 ※1

> workon test

とすればtestの環境に変更されるし

> deactivate

とすればvirtualenvの環境から出ることもできますね。

virtualenvwrapperそのものの使い方がPS内でできるようになりました。

これでいつもと変わらない環境がてにはいりました。

他に使えるコマンドを知りたい場合は

> Get-Module virtualenvwrapper | Select-Object -ExpandProperty ExportedFunctions

を実行すればひと通り出力されます。

以上でひと通り終わりです。 開発者の方には本当に感謝です。

ただ、PS初心者の方はとても導入が困難だと思うので、私含めそのような方でも手軽に導入できるようにドキュメントを作っていただけると、なお良いのではないかとも思います。

※1: mkvirtualenv時に、なにやらファイルが無いいよってエラーが出る。 気になる方は「$profile\..\Modules\Extensions」の中にあるファイルを削除するとよいでしょう。

追記(20120802):
PowerShell 3で使用する場合はこちらを使ってください。 開発者にpull requestしたので、もしかしたら対応していただけるかもしれません。

追記(20120807)
無事Pull RequestがConfirmedされました。 次回リリース以降にPowerShell3で上記エラーにはならないかと思います。

追記(20120808)
PowerTabを入れるとタブ補完でenvsの選択が楽になります。
インストールはModulesの中にPowerTabディレクトリを作成してそこにひと通りのスクリプトを入れて、VirtualenvWrappeより前にImport-Moduleしました。
Modulesの中がごちゃごちゃしだしたのでVirtualenvWrapperはVirtualenvWrapperディレクトリの作成の上そこにスクリプトを起きました。

そんでもってこっちがPS3対応のdiff

参考:

http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner05.aspx
http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner06.aspx