conda activateでエラーが出る話

<h2>1.はじめに</h2>

<ul>
<li>Windows10</li>
<li>Anaconda 4.7.12</li>
<li>PowerShell</li>
</ul>

の環境下で<kbd>conda activate</kbd>を実行すると下記のエラーログがでる

```
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
If using 'conda activate' from a batch script, change your
invocation to 'CALL conda.bat activate'.

To initialize your shell, run

    $ conda init <SHELL_NAME>

Currently supported shells are:
  - bash
  - cmd.exe
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

IMPORTANT: You may need to close and restart your shell after running 'conda init'.
```

以下、対処法

<h2>方法1.activateにする</h2>
<b>PowerShell</b>にこだわりがなければ<b>コマンドプロンプト</b>を使う方法
一番堅実

環境変数のPATHに
インストールした場所\Anaconda3
インストールし場所\Anaconda3\Scripts
を加えて<b>再起動</b>し

<kbd>conda activate 環境</kbd>ではなく
<kbd>activate 環境</kbd>にすれば
activate.batから環境に入れる

<h2>方法2.conda init &lt;SHELL_NAME&gt;を実行してみる</h2>
どうしてもPowerShellが良いんだ！という人向け
または他のshellで<b>方法1</b>が失敗する人

エラーログ通りに
<kbd>conda init powershell</kbd>
を実行、今回はpowershellで行う

```
no change     C:\ProgramData\Anaconda3\Scripts\conda.exe
no change     C:\ProgramData\Anaconda3\Scripts\conda-env.exe
no change     C:\ProgramData\Anaconda3\Scripts\conda-script.py
no change     C:\ProgramData\Anaconda3\Scripts\conda-env-script.py
no change     C:\ProgramData\Anaconda3\condabin\conda.bat
no change     C:\ProgramData\Anaconda3\Library\bin\conda.bat
no change     C:\ProgramData\Anaconda3\condabin\_conda_activate.bat
no change     C:\ProgramData\Anaconda3\condabin\rename_tmp.bat
no change     C:\ProgramData\Anaconda3\condabin\conda_auto_activate.bat
no change     C:\ProgramData\Anaconda3\condabin\conda_hook.bat
no change     C:\ProgramData\Anaconda3\Scripts\activate.bat
no change     C:\ProgramData\Anaconda3\condabin\activate.bat
no change     C:\ProgramData\Anaconda3\condabin\deactivate.bat
modified      C:\ProgramData\Anaconda3\Scripts\activate
modified      C:\ProgramData\Anaconda3\Scripts\deactivate
modified      C:\ProgramData\Anaconda3\etc\profile.d\conda.sh
modified      C:\ProgramData\Anaconda3\etc\fish\conf.d\conda.fish
no change     C:\ProgramData\Anaconda3\shell\condabin\Conda.psm1
modified      C:\ProgramData\Anaconda3\shell\condabin\conda-hook.ps1
modified      C:\ProgramData\Anaconda3\Lib\site-packages\xontrib\conda.xsh
modified      C:\ProgramData\Anaconda3\etc\profile.d\conda.csh
modified      C:\Users\int\Documents\WindowsPowerShell\profile.ps1

==> For changes to take effect, close and re-open your current shell. <==
```

上記のログがでるので
shellを再起動し、再びconda activateを実行してみると
またしてもエラー

```
. : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\int\Documents\WindowsPowerShell\profile.p
s1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135
170) を参照してください。
発生場所 行:1 文字:3
+ . 'C:\Users\int\Documents\WindowsPowerShell\profile.ps1'
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
```

どうやらpermission deniedでスクリプトファイルが読み込めないらしい
ので下記を参考に権限を変えてあげる
http://totech.hateblo.jp/entry/2017/09/29/162411

まず、PowerShellで<kbd>Get-ExecutionPolicy</kbd>を実行し
Restrictedになっていることを確認

```
PS C:\Users\int> Get-ExecutionPolicy
Restricted
```

<h3>直接実行ポリシー設定を変更する</h3>

<b>Powershellを管理者として実行</b>し、
<kbd>Set-ExecutionPolicy RemoteSigned</kbd>をする

```
PS C:\Users\int> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ
トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"):
```

YESとした後、再びPowerShellで<kbd>Get-ExecutionPolicy</kbd>を実行し
今度はRemoteSignedになっていることを確認

```
PS C:\Windows\system32> Get-ExecutionPolicy
RemoteSigned
```

PowerShellを再起動すると

```
パーソナル プロファイルとシステム プロファイルの読み込みにかかった時間は 643 ミリ秒です。
(base) PS C:\Users\int>
```

入れます。

<h3>問題点</h3>
どうやらPowershellを起動する度、base環境に入ってしまうので
C:\Users\\&lt;ユーザー名&gt;\\Documents\WindowsPowerShell\profile.ps1を

```
(& "C:\ProgramData\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression;conda deactivate
```

としてあげると元に戻るのだが
これがセキュリティ的に正しいのか動作的に安定するのか不明なため
デフォルトで使ったほうが安全かと思われる