はじめに #
Windows 10のPowerShellでAnaconda Pythonを使えるようになるまでに苦労したので、備忘録として残す。 PowerShellが起動時に読み込むスクリプトに、Anacondaが使えるようになる設定を記述しておく。なお、本記事の設定に管理者権限は不要である。
環境 #
- Windows 10 Home Ver. 1809
- Anaconda3 Ver. 2019.03
設定方法のまとめ #
始めに、実施方法を簡潔にまとめる。Anacondaはすでにインストールされているものとする。
まず、PowerShell起動時に読み込まれるスクリプトのパスを確認するため、PowerShellを起動して以下を実行する($
の入力も必要)。
$profile
実行すると、以下のようなパスが表示される。
C:\Users\(ユーザ名)\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
フォルダが存在しない場合は作成してから、
notepad $profile
を実行して、メモ帳で設定ファイルMicrosoft.PowerShell_profile.ps1
を開いておく(ファイルがない場合は作成される)。
次に、Windowsの「スタートメニュー」→「アプリ一覧」→「Anaconda3 (64-bit)」と進み、「Anaconda Powershell Prompt」を右クリックして、「その他」→「ファイルのある場所を開く」をクリックする。 すると、以下のようなAnacondaのショートカットのあるフォルダがエクスプローラで開かれる。
C:\Users\(ユーザ名)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)
さらに、Anaconda Powershell Promptのショートカットアイコンを右クリックして、プロパティを開くと、「リンク先」は以下のようになっているはずである(見やすいように改行した)。
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
-ExecutionPolicy ByPass -NoExit -Command
"& 'C:\Users\(ユーザ名)\Anaconda3\shell\condabin\conda-hook.ps1' ;
conda activate 'C:\Users\(ユーザ名)\Anaconda3' "
この中の
C:\Users\(ユーザ名)\Anaconda3\shell\condabin\conda-hook.ps1
をメモ帳で開き、中身をすべて先程のMicrosoft.PowerShell_profile.ps1
にコピーし、その後ろに、
conda activate
というコマンドを追加する(下図参照)。
Microsoft.PowerShell_profile.ps1
とconda-hook.ps1
を閉じる。
PowerShellを再起動すると、スクリプトの実行が無効になっているため、Microsoft.PowerShell_profile.ps1を読み込めないとエラーが出る。そこで、現在のユーザがスクリプトを実行できるように以下のコマンドを入力する。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
入力すると実行ポリシーを変更するか確認されるので、さらにYを入力する。
以上で設定は完了である。もう一度PowerShellを再起動すると、PythonとIPythonを自由に使えるようになる。
Pythonの実行例
(base) PS C:\Users\(ユーザ名)\Documents> python
Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
IPythonを実行するには、ipythonと入力する。
設定の詳細 #
上記の設定方法について補足する。
Windows 7では、OSの環境変数にAnacondaのパスを追加するだけで、コマンドプロンプトからPythonを実行できた。 そのため、エクスプローラ上でShift+右クリックでコマンドプロンプトを起動し、現在のパスでPythonスクリプトを実行することが可能であった。
しかし、後述のようにWindows 10ではこの方法が使えなくなったので、代わりの方法を探した。 また、Windows 10ではShift+右クリックでPowerShellが起動するようになり、コマンドプロンプトに戻すには管理者権限が必要である。 管理者権限がない環境でも設定できるようにしたいため、PowerShellで実行できるようにする。
まず、既にAnacondaのインストールが終わっているものとして、PowerShellからPythonを実行できるか確認する。
PS C:\Users\(ユーザ名)\Documents> python
python : 用語 'python' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されま
せん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく
ださい。
発生場所 行:1 文字:1
+ python
+ ~~~~~~
+ CategoryInfo : ObjectNotFound: (python:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
やはり実行できない。
次に、Windowsの環境変数に、Pythonの実行フォルダを追加してみた(実際に追加しても上手くいかないので注意)。
Anaconda Powershell PromptにはPythonのパスが通っているはずなので、以下のコマンドでパスを表示する。
(base) PS C:\Users\(ユーザ名)> $env:Path.split(";")
C:\Users\(ユーザ名)\Anaconda3
C:\Users\(ユーザ名)\Anaconda3\Library\mingw-w64\bin
C:\Users\(ユーザ名)\Anaconda3\Library\usr\bin
C:\Users\(ユーザ名)\Anaconda3\Library\bin
C:\Users\(ユーザ名)\Anaconda3\Scripts
C:\Users\(ユーザ名)\Anaconda3\bin
C:\Users\(ユーザ名)\Anaconda3\condabin
(以下略)
以上のAnaconda関係のフォルダを全てWindowsのパスに追加する。追加する方法は以下を参照。 環境変数の設定方法 | 若葉プログラミング塾
追加すると一応Pythonを起動できるが、環境がactivateされず、ライブラリが読み込めていないというエラーが出る。 実際、NumPyなどをインポートできず実質的にPythonを使えない。
PS C:\Users\(ユーザ名)\Documents> 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.
>>
そこで、Anaconda 2019.03 for Windows Installerから実装されたAnaconda Powershell Promptがどのように起動されているか確認する。 前述のように、Windowsの「スタートメニュー」→「プログラム」→「Anaconda3 (64-bit)」→「Anaconda Powershell Prompt」のプロパティの「リンク先」は以下のようになっていた。
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe
-ExecutionPolicy ByPass -NoExit -Command
"& 'C:\Users\(ユーザ名)\Anaconda3\shell\condabin\conda-hook.ps1' ;
conda activate 'C:\Users\(ユーザ名)\Anaconda3' "
すなわち、powershell.exe
を起動し、
C:\Users\(ユーザ名)\Anaconda3\shell\condabin\conda-hook.ps1
のスクリプトを実行した後、conda activate
コマンドを実行していることが分かる。
これをPowerShell起動時に実行してやれば、Anaconda Powershell Promptと同じ環境になる。 PowerShellは、起動時にprofile変数にある設定ファイル(初期設定ではMicrosoft.PowerShell_profile.ps1)を読み込みに行くので、以上のコマンドを設定ファイルに記述する。
ただし、Windows 10の初期設定では、セキュリティポリシーによって設定ファイルの読み込みが制限されている。
そこで、以下のコマンドでローカルにあるスクリプトを実行可能にする。
-Scope CurrentUser
でセキュリティポリシーの変更を現在のユーザのみに限ることで、管理者権限が不要になる。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
以上の設定で、Shift+右クリックでPythonを実行可能なPowerShellが起動するようになる。
参考 #
下2つののサイトでは、パスを追加するだけでPythonを実行できるとあったが、筆者の環境では出来なかった。 2018年の記事なので、それ以降のWindows 10のアップデートにより出来なくなった可能性がある。
PowerShellのセキュリティポリシーについては、以下を参照。