Drafts

@cm3 の草稿置場 / 少々Wikiっぽく使っているので中身は適宜追記修正されます。

minicondaをvirtualenvと組み合わせて使う

(ana|mini)condaを使おうとするのは、Windowsにおいて大抵インストールの難しさで悪名高いScipy, Numpy系のインストールをする場合だと思うのだけれど、プロジェクトごとにvirtualenvで管理していたりする人にとっては仮想環境管理にまでcondaを使いたくないということがある。

condaはWindows側でビルドせずにバイナリで引っ張ってくるのでいろんなモジュールのインストールが上手くいくのだが、バイナリがなければpipを使ったりするようになっている*1

ってことは、逆にScipyとかインストールするときだけcondaコマンド使えればいいんじゃない?って思うわけです。

Windows

conda install -p %VIRTUAL_ENV% [モジュール名]

Linux

conda install -p $VIRTUAL_ENV [モジュール名]

で行けます。virtualenvは %VIRTUAL_ENV% にフォルダへのパスを保存しているのでそこを指定してインストール。ちゃんとmatplotlibがこれで動くことを確認しました。

ただし、これの影響かどうか定かじゃないですが困ったことがあって、virtualenv 内でImportError: No module named 'pip'って言われてpipが使えなくなったんです。Scriptsフォルダ内のpip3.exeをコピーしてpip.exeを上書きしたら問題なくなりました。あと、virtualenvは %VIRTUAL_ENV% 直下に python.exe 、Scriptsフォルダ内に他のスクリプトと分けていて、Pathにはどちらも追加する仕様なのですが、conda系はぜんぶ Scriptsフォルダにまとめてくる。

この点は conda 側に合わせて統一しました。%VIRTUAL_ENV% 直下のではcondaでインストールしたモジュールが使えなかったけど、Scriptsフォルダ内のpython.exeだとどちらも使えたので。理由はよく分かってないけれど。

しかもpip freezeすれば双方のパッケージ出てくるし。素晴らしい。(まあ双方出てきちゃったら、次に環境構築するとき自動ってわけにはいかなくなるんだけどね。)

f:id:cm3ak:20150501033219p:plain

ちなみに conda のインストール

Linux の場合、Miniconda — Condaを参考に

wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh
bash Miniconda2-latest-Linux-x86_64.sh

でインストールできる。対話式のインストールになっていて、最後 .bashrc にパスを通すコマンドを入れるか聞かれるのでyesという。でもそうすると venv 環境を上書きされるので、PYTHONHOME や PYTHONPATH を設定するとか、venv 環境を回復する必要がある。詳しくは要調査。