Windows+Anaconda で環境切り替えしようとししてつまづいた2つのポイント

「scikit-learnとTensorFlowによる実践機械学習」の本を読み進めている。
TensorFlowのパートに入ったので、TensorFlowの環境を通常と別に構築しようとしたのでまとめておく
(なお最終的には失敗している。)

環境:
Windows 7 64bit
python --version

  • > Python 3.6.6 :: Anaconda 4.3.1 (64-bit)

Anacondaは環境管理もできる(のでvirtualenvを使う必要はない)

参考書では通常のpythonをインストールし、pipでパッケージ管理をしている。そして、隔離された環境を作成するためにvirtualenvを使うことを推奨している。
参考書に合わせてvirtualenvを使おうと思っていたが、調べてみると、Anacondaってパッケージの管理だけじゃなくて、環境の管理もできるということを知った。

condaは仮想環境管理にも使えます。: virtualenv/venvの代わり
仮想環境下でcondaやpipでパッケージをインストールできます。
condaで作る仮想環境はpythonバージョン違いまで吸収できるため、virtualenvの上位互換と言えます。
事実、anacondaでvirtualenvを使おうとすると、condaで環境を作るように警告が出ます。(virtualenvが作れはします。)
データサイエンティストを目指す人のpython環境構築 2016 - Qiita

「Condaの迷信と誤解」というタイトルの記事にはこう書かれている。

Reality: You actually can install (some) conda packages within a virtualenv, but better is to use Conda's own environment manager: it is fully-compatible with pip and has several advantages over virtualenv.
拙訳:実際には、virtualenvを通じてcondaのパッケージをインストールすることはできる。しかし、より良いのは、Conda事態の環境管理を使用することである。これはpipと完全に互換性があり、virtualenvと比べていくつかの利点がある。

Conda: Myths and Misconceptions | Pythonic Perambulations

なお、Condaで独立した環境を構築するためのコマンドに関しては、以下を参照。
Managing environments - Conda documentation


Powershellで切り替えが上手く行かない

PowerShellの上でactivateを実行すると、特にエラーなどは発生せず、正常に実行されたように見えるが、
実際には環境が切り替わっていないという不思議な事態が起きる。

解決策は
PowerShellでAnacondaの仮想環境をactivateするメモ - Qiita
に書いてあるとおり。以下のように打つとactivateが反映される。

conda install -n root -c pscondaenvs pscondaenvs

また、activateの際にエラーメッセージが表示され、実行できなかった。
activateでは「.ps1」 という拡張子のファイル(PowerShellスクリプト)を実行するが、デフォルトではスクリプトの実行は禁止されているからである。
管理者権限でPowerShellを立ち上げて、以下のように打つと「.ps1」拡張子のファイルを実行できる。

Set-ExecutionPolicy RemoteSigned