PowerShellからAnaconda Pythonの仮想環境を使えるようにしたときのメモ


このエントリーをはてなブックマークに追加

PowerShellにてAnaconda Pythonの仮想環境をactivateしようとしてactivate (仮想環境名)というコマンドを実行しても何も起こりません。これを修正しようとしたときにやったことのメモです。注:私はAnaconda PythonにもPowerShellにも精通していないため、これが正しい方法かはわかりません。

condaのバージョンを最新にする

  • conda --versionでバージョンを調べると4.5.11と古かったので、以下の方法で4.9.2にupdate

Windows PowerShell から Anaconda 環境を起動できるようにするための初期化コマンドを実行

> conda init 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
no change     C:\ProgramData\Anaconda3\Lib\site-packages\xontrib\conda.xsh
modified      C:\ProgramData\Anaconda3\etc\profile.d\conda.csh
modified      C:\Users\(ユーザ名)\Documents\PowerShell\profile.ps1
modified      C:\Users\(ユーザ名)\Documents\WindowsPowerShell\profile.ps1

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

改変されたprofile.ps1を確認

このコマンドによって改変されたC:\Users\(ユーザ名)\Documents\PowerShell\profile.ps1およびC:\Users\(ユーザ名)\Documents\WindowsPowerShell\profile.ps1を見に行くと、いずれにも以下のコードが付け足されていることを確認しました。(profile.ps1が2つあるのは、たぶんWindows 10に組み込みで入っているWindows PowerShellに加えて、私がPowerShell Coreを別途インストールしてあることが原因です。)

#region conda initialize
# !! Contents within this block are managed by 'conda init' !!
(& "C:\ProgramData\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
#endregion

スクリプト実行ポリシーを変更

次に、さきほどの指示通り別のWindows PowerShellを起動すると、以下のエラーが出ました。

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

これは、私のWindows Powershellスクリプト実行ポリシーがRestrictedのままだったことが原因でした。

> Get-ExecutionPolicy
Restricted

そこで、管理者権限付きのWIndows PowerShellを起動して、以下のコマンドを実行し、スクリプト実行ポリシーを変更しました(注:システム全体に影響を与えます)。

> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

そして、改めてまた別のWIndows PowerShellを起動することで、無事Anaconda Pythonを使えるPowerShell環境ができたようです。conda activateによる環境の変更も実現できています。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

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

同様に、PowerShell CoreからもAnaconda Pythonが使えることを確認しました。

ただ、profile.ps1のコードが増えた影響か、Windows PowerShellを起動するたび毎回約1秒かかるようになってしまいました。これが嫌な場合、Anaconda がやっと PowerShell に公式対応した - Qiita を真似して、condainiという名前の関数を手動で呼んだときだけAnaconda Pythonが使えるように変更するのがよさそうです(私は未テスト)。以下にコードを引用します。

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

参考URLs