概要
PowerShellでPythonをインストールし、WindowsでPythonの実行環境を構築するスクリプトを書いたので備忘録として投稿。
InstallALlUsersでインストールしているため利用する場合は管理者権限で実行してください。
- インストールされるバージョン:
3.10.5
- インストール先:
C:\Program Files\python310
スクリプト
#Python3.10.5 インストーラダウンロード
Write-Host "Pythonインストーラをダウンロードします"
Invoke-WebRequest -Uri "https://www.python.org/ftp/python/3.10.5/python-3.10.5-amd64.exe" -OutFile $env:temp\python.exe
if(!(Test-Path $env:temp)){
$Host.UI.WriteErrorLine("ダウンロードに失敗しました。")
exit 1
}
#Python3.10.5 インストール
Write-Host "インストールを開始します。"
Start-Process "$env:temp\python.exe" -ArgumentList "PrependPath=1","InstallAllUsers=1","/quiet" -wait
#Python3.10.5 インストーラ削除
Write-Host "インストーラを削除します"
Remove-Item $env:temp\python.exe -force
#環境変数の更新と確認
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
$paths = $env:path.split(";")
$paths.foreach({if($PSItem -like 'C:\Program Files\Python310\'){ Write-Host "正常にインストールが完了しました"; break }})
解説
味気ないので一応解説します。
インストーラのダウンロード
まず初めに公式のダウンロードリンクからPython3.10.5のインストーラを一時フォルダにダウンロードしています。
#Python3.10.5 インストーラダウンロード
Write-Host "Pythonインストーラをダウンロードします"
Invoke-WebRequest -Uri "https://www.python.org/ftp/python/3.10.5/python-3.10.5-amd64.exe" -OutFile $env:temp\python.exe
ダウンロードするバージョンを変更したい場合は-Uri
の引数を変更してください。
ダウンロード終了後、ダウンロードファイルが存在している(ダウンロードに成功している)ことを確認しています。
※Try-Catchなりできるのかしら? 有識者が見ていたら教えてください。
if(!(Test-Path $env:temp)){
$Host.UI.WriteErrorLine("ダウンロードに失敗しました。")
exit 1
}
存在しない場合はexit 1でエラー終了させます。
サイレントインストール
Python3.10.5をサイレントインストールします。
/quiet
がサイレントインストールのオプションです。
その他のオプションについてはこちらのリファレンスを参照してください。
#Python3.10.5 インストール
Write-Host "インストールを開始します。"
Start-Process "$env:temp\python.exe" -ArgumentList "PrependPath=1","InstallAllUsers=1","/quiet" -wait
インストーラファイルの削除
インストール完了後、インストーラファイルを削除します。
#Python3.10.5 インストーラ削除
Write-Host "インストーラを削除します"
Remove-Item $env:temp\python.exe -force
環境変数確認
インストール時に環境変数を設定しているため、環境変数を再読込し、パスが正常に通っていることを確認します。
正常にパスが通っている場合、インストールは正常終了したとみなします、
#環境変数の更新と確認
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
$paths = $env:path.split(";")
$paths.foreach({if($PSItem -like 'C:\Program Files\Python310\'){ Write-Host "正常にインストールが完了しました"; break }})