田舎高専生のメモ置き場

技術ブログとかではないです。

CygwinからAnacondaを使いたいときにありがちなトラブル

cygwinからAnaconda(というかconda)で仮想環境作って使いたいときありますよね。
すでにWindows用のインストーラを使ってAnacondaをインストールしていたので、これをそのまま使います。

Windowsで[システム]→[システムの詳細設定]→[環境変数]ボタンをクリックして、ユーザー環境変数のPathを選んで[編集]ボタンを押すとAnacondaへのPATHが出ます。
これをcygwinのbashrcなどに

export PATH=/cygdrive/c/Users/ユーザー/Anaconda3:/cygdrive/c~省略~:$PATH

に追加します。

次に conda create コマンドで仮想環境を構築します。

% conda create -n py2 python=2.7 anaconda

あとは

% source activate py2

でactivateするだけ…
だと思っていたんですが、いざ起動してみると

% python -i
Python 3.5.1 |Anaconda 4.1.0 (64-bit)| (default, Jun 15 2016, 15:29:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

どうやらちゃんとactivateされていないみたいです。

echo $PATH すると
/C/Users/ユーザー/Anaconda3/envs/py2:/C/Users/~省略~:/cygdrive/c/Users/ユーザー/Anaconda3:/cygdrive/c~省略~

のように仮想環境までのパスをWindowsのフルパスで追加していました。
この /C/Users/~ を /cygdrive/c/Users/~ にしてほしいですね。というわけでactivateをいじります。
which activate して、activateというスクリプトが置かれているディレクトリ(おそらくAnaconda3/Scripts内)に移動し、cpでactivateを別名でコピーします。
コピーしたものをエディタで開きます。これを読むと61行目の _NEW_PART という変数に仮想環境までのパスが格納され、67行目でPATHに追加されるみたいです。
export PATHされる前に、

_NEW_PART=${_NEW_PART//C/cygdrive/c}

という処理を追加します。

% source <コピーしたactivate> py2

echo $PATH すると
/cygdrive/c/Users/ユーザー/Anaconda3/envs/py2:/cygdrive/c/Users/~省略~:/cygdrive/c/Users/ユーザー/Anaconda3:/cygdrive/c~省略~
ちゃんと変わっていました。今度からactivateしたいときはこちらを使用すると出来るようになります。