Anaconda がやっと PowerShell に公式対応した

最近、Anacondaは、PATH を既定では設定しないようする等環境の変更が行われたため、PowerShell では使いづらい状態になっていましたが Anaconda-2019.03 (Conda 4.6.11) が公開されて、やっと PowerShell に公式に対応しました。インストールすると、以下のように Anaconda Powershell Prompt というメニューが追加されるようになっています。
![anaconda01.png](https://qiita-image-store.s3.amazonaws.com/0/103055/14eb7214-7389-6448-b445-c07a8d44dc5d.png)

これからは問題なく PowerShell で conda の環境を起動することができるようになりました。その設定で少し填まるところがあるので以下にメモをしておきます。

コマンドプロンプトからだと conda の環境を、`C:\Users\user\Anaconda3\Scripts\activate`で 起動できるのですが、Anaconda Powershell Prompt ではない通常の PowerShell では `~\Anaconda3\Scripts\activate`としても、コマンドプロンプトらしきものが一瞬だけ立ち上げるだけで、conda の環境は起動できません。PowerShell から Anaconda 環境を起動できるようにするには、`conda init powershell`と設定する必要があります。コマンドを打つと、以下のメッセージのように PowerShell の Profile（C:\Users\user\Documents\WindowsPowerShell\profile.ps1）が書き換えられます。

```powershell
PS C:\Users\user> .\Anaconda3\Scripts\conda.exe init powershell
WARNING: The conda.compat module is deprecated and will be removed in a future release. 
no change     C:\Users\user\Anaconda3\Scripts\conda.exe
no change     C:\Users\user\Anaconda3\Scripts\conda-env.exe
no change     C:\Users\user\Anaconda3\Scripts\conda-script.py
no change     C:\Users\user\Anaconda3\Scripts\conda-env-script.py
no change     C:\Users\user\Anaconda3\condabin\conda.bat
no change     C:\Users\user\Anaconda3\Library\bin\conda.bat
no change     C:\Users\user\Anaconda3\condabin\_conda_activate.bat
no change     C:\Users\user\Anaconda3\condabin\rename_tmp.bat
no change     C:\Users\user\Anaconda3\condabin\conda_auto_activate.bat
no change     C:\Users\user\Anaconda3\condabin\conda_hook.bat
no change     C:\Users\user\Anaconda3\Scripts\activate.bat
no change     C:\Users\user\Anaconda3\condabin\activate.bat
no change     C:\Users\user\Anaconda3\condabin\deactivate.bat
modified      C:\Users\user\Anaconda3\Scripts\activate
modified      C:\Users\user\Anaconda3\Scripts\deactivate
modified      C:\Users\user\Anaconda3\etc\profile.d\conda.sh
modified      C:\Users\user\Anaconda3\etc\fish\conf.d\conda.fish
no change     C:\Users\user\Anaconda3\shell\condabin\Conda.psm1
modified      C:\Users\user\Anaconda3\shell\condabin\conda-hook.ps1
modified      C:\Users\user\Anaconda3\Lib\site-packages\xonsh\conda.xsh
modified      C:\Users\user\Anaconda3\etc\profile.d\conda.csh
modified      C:\Users\user\Documents\WindowsPowerShell\profile.ps1
==> For changes to take effect, close and re-open your current shell. <==
PS C:\Users\user>                                                                      
```
その状態では PowerShell を起動したときに、conda の環境も起動されます。それって不便ですよね。それで profile.ps1 をみると以下のようになっていました。

```profile.ps1
#region conda initialize
# !! Contents within this block are managed by 'conda init' !!
(& "c:\Users\user\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
#endregion
```
起動時に実行されるようになっているので、自分の場合は関数に変更しました。そうすると`condaini`とコマンドを打っと conda の環境が起動するようになります。

```profile.ps1
#region conda initialize
Function condaini{
  (& "c:\Users\user\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
}
#endregion
```

も一つの Anaconda の問題は、`~\Anaconda3\python`とコマンドをたたいて直接 python3.7 を起動したときに numpy のインポートでエラーが発生することです。これに関しては、以下のようにワーニングが出るようになりました。

```powershell
PS C:\Users\Admin> ~\Anaconda3\python
Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated.  Libraries may fail to load.  To activate this environment
please see https://conda.io/activation
Type "help", "copyright", "credits" or "license" for more information.
>>>                                                                                                  
```
Windows 版だけは、直接 Python3.7 を起動するのではだめで、conda の環境を起動してから Python3.7 を起動する必要があるということになったようです。Python3.7 を直接起動したらダメということで問題になるのは、自分の場合は、Pycharm と Excel で xlwings を使う二つの場合でした。Pycharm の方は、Version 2019.1 で対応がなされたので、特に何もしなくても問題は解決しました。

Excel で xlwings を使う場合には、Excel を Anaconda Prompt 等 conda の環境が起動した状態か、必要な環境変数を設定してから Excel を起動する必要があります。一回だけだといいのですが毎回しないといけないので結構手間になります。それで、Python.org からダウンロードした Python の方を使うようにしました。Python.org の Python は、以前 numpy, scipy のインストールが難しかったのですが、現在は`pip install`で簡単にインストールできるようになっています。

なお、xlwings のコードの先頭に以下のよう（base の場合で仮想環境を使用する場合は適宜修正をしてください）に numpy をインポートするために必要なPATHのコードを書いても動作します。Anaconda の Python3.7をどうしても使う必要がある場合には便利です。

```python
import os
os.environ['PATH'] = f"{os.path.expanduser('~')}\\Anaconda3\\Library\\bin;{os.environ['PATH']}"
```
Windows Anaconda の base が 通している PATH を調べると、以下の7つになっています。numpy の場合は、`Anaconda3\Library\bin`だけ追加すればエラーは出なくなります。

```
Anaconda3;
Anaconda3\Library\mingw-w64\bin;
Anaconda3\Library\usr\bin;
Anaconda3\Library\bin;
Anaconda3\Scripts;
Anaconda3\bin;
Anaconda3\condabin;
```
LinuxとMac の Anaconda では、以下の２つだけなので Windows はやたらに多くなっています。また、速度も落ちるので、Python は、Windows PC であっても WSL, Vagrant, Docker 等を使って linux 環境で動作させた方がいいかもしれません。ただし、xlwings は、Excel のマクロ等として動作させるものなのでそういう方法が使えません。
 
```
Anaconda3/bin:
Anaconda3/condabin:
```