Helve’s Python memo

Pythonを使った機械学習やデータ分析の備忘録

Windows10のPowerShellでAnaconda Pythonを使う方法

Windows10のPowerShellでAnaconda Pythonを使えるようになるまでに苦労したので、備忘録として残す。
PowerShellが起動時に読み込むスクリプトに、Anacondaが使えるようになる設定を記述しておく。
なお、本記事の設定に管理者権限は不要である。

目次

環境

Windows 10 Home 1809
Anaconda3 2019.03

設定方法のまとめ

始めに、実施方法を簡潔にまとめる。
Anacondaはすでにインストールされているものとする。

PowerShellを起動し、以下を実行する。"$"の入力も必要。

$profile

すると、PowerShell起動時に読み込まれるスクリプトのパスが表示されるので、
フォルダを作成してから、

notepad $profile

を実行して、メモ帳でMicrosoft.PowerShell_profile.ps1という設定ファイルを開いておく(ない場合は作成される)。

次に、Windowsのスタートメニュー → アプリ一覧 → Anaconda3 (64-bit) → Anaconda Powershell Prompt を右クリックして、「その他」 → 「ファイルのある場所を開く」をクリックする。
Anacondaのショートカットのあるフォルダがエクスプローラで開かれるので、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

というコマンドを追加する(下図参照)。

f:id:Helve:20190527210031p:plain

Microsoft.PowerShell_profile.ps1とconda-hook.ps1を閉じる。

PowerShellを再起動するとエラーが出るが、無視して以下のコマンドを入力する。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

以上で設定は完了である。もう一度PowerShellを再起動すると、Pythonを自由に使えるようになる。

(base) PS D:\user\Document> 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.
>>>

設定の詳細

上記の設定方法について補足する。

Windows 7では、OSの環境変数にAnacondaのパスを追加するだけで、コマンドプロンプトからPythonを実行できた。
そのため、Explorer上でShift+右クリックでコマンドプロンプトを起動し、現在のパスでPythonスクリプトを実行することが可能であった。

しかし、後述のようにWindows 10ではこの方法が使えなくなったので、代わりの方法を探した。
また、Windows 10ではShift+右クリックでPowerShellが起動するようになり、コマンドプロンプトに戻すには管理者権限が必要である。
管理者権限がない環境でも設定できるようにしたいため、PowerShellで実行できるようにする。


まず、既にAnacondaのインストールが終わっているものとして、PowerShellからPythonを実行できるか確認する。

PS D:\user\Document> 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のパスに追加する。追加する方法は以下を参照。
DOSプロンプト


追加すると一応Pythonを起動できるが、環境がactivateされず、ライブラリが読み込めていないというエラーが出る。
実際、NumPyなどをインポートできず実質的にPythonを使えない。

PS D:\user\Document> 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)を読み込みに行くので、以上のコマンドを設定ファイルに記述する。

ただし、Windows10の初期設定では、セキュリティポリシーによって設定ファイルの読み込みが制限されている。
そこで、以下のコマンドでローカルにあるスクリプトを実行可能にする。
-Scope CurrentUserセキュリティポリシーの変更を現在のユーザのみに限ることで、管理者権限が不要になる。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

以上の設定で、Shift+右クリックでPythonを実行可能なPowerShellが起動するようになる。

参考

下2つののサイトでは、パスを追加するだけでPythonを実行できるとあったが、筆者の環境では出来なかった。
2018年の記事なので、それ以降のWindows10のアップデートにより出来なくなった可能性がある。
PowerShellでAnacondaを使う方法 – 山本隆の開発日誌
WindowsでPythonがうまく動かないとき(PATHの設定) - Qiita

PowerShellセキュリティポリシーについては、以下を参照。
PowerShellのExecutionPolicyのスコープとかについて詳しく - Qiita

※Adblockが有効の場合やモバイル版ページでは、シェアボタンをクリックできません