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」のいずれかが出力されるかと思います。
- Restrictedはすべてのスクリプトの実行を禁止している状態
- AllSignedは署名済みスクリプトのみ実行可能な状態
- RemoteSignedはローカルに保存されているスクリプト、ダウンロードされた署名済みスクリプトが実行可能な状態
- 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