123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/usr/bin/env powershell
- # Install Python 3.8 for x64 and x86 in order to build wheels on Windows.
- Set-StrictMode -Version 2
- $ErrorActionPreference = 'Stop'
- trap {
- $ErrorActionPreference = "Continue"
- Write-Error $_
- exit 1
- }
- # Avoid "Could not create SSL/TLS secure channel"
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- function Install-Python {
- Param(
- [string]$PythonVersion,
- [string]$PythonInstaller,
- [string]$PythonInstallPath,
- [string]$PythonInstallerHash
- )
- $PythonInstallerUrl = "https://www.python.org/ftp/python/$PythonVersion/$PythonInstaller.exe"
- $PythonInstallerPath = "C:\tools\$PythonInstaller.exe"
- # Downloads installer
- Write-Host "Downloading the Python installer: $PythonInstallerUrl => $PythonInstallerPath"
- Invoke-WebRequest -Uri $PythonInstallerUrl -OutFile $PythonInstallerPath
- # Validates checksum
- $HashFromDownload = Get-FileHash -Path $PythonInstallerPath -Algorithm MD5
- if ($HashFromDownload.Hash -ne $PythonInstallerHash) {
- throw "Invalid Python installer: failed checksum!"
- }
- Write-Host "Python installer $PythonInstallerPath validated."
- # Installs Python
- & $PythonInstallerPath /passive InstallAllUsers=1 PrependPath=1 Include_test=0 TargetDir=$PythonInstallPath
- if (-Not $?) {
- throw "The Python installation exited with error!"
- }
- # NOTE(lidiz) Even if the install command finishes in the script, that
- # doesn't mean the Python installation is finished. If using "ps" to check
- # for running processes, you might see ongoing installers at this point.
- # So, we needs this "hack" to reliably validate that the Python binary is
- # functioning properly.
- # Wait for the installer process
- Wait-Process -Name $PythonInstaller -Timeout 300
- Write-Host "Installation process exits normally."
- # Validate Python binary
- $PythonBinary = "$PythonInstallPath\python.exe"
- & $PythonBinary -c 'print(42)'
- Write-Host "Python binary works properly."
- # Installs pip
- & $PythonBinary -m ensurepip --user
- Write-Host "Python $PythonVersion installed by $PythonInstaller at $PythonInstallPath."
- }
- # Python 3.8
- $Python38x86Config = @{
- PythonVersion = "3.8.0"
- PythonInstaller = "python-3.8.0"
- PythonInstallPath = "C:\Python38_32bit"
- PythonInstallerHash = "412a649d36626d33b8ca5593cf18318c"
- }
- Install-Python @Python38x86Config
- $Python38x64Config = @{
- PythonVersion = "3.8.0"
- PythonInstaller = "python-3.8.0-amd64"
- PythonInstallPath = "C:\Python38"
- PythonInstallerHash = "29ea87f24c32f5e924b7d63f8a08ee8d"
- }
- Install-Python @Python38x64Config
- # Python 3.9
- $Python39x86Config = @{
- PythonVersion = "3.9.0"
- PythonInstaller = "python-3.9.0"
- PythonInstallPath = "C:\Python39_32bit"
- PythonInstallerHash = "4a2812db8ab9f2e522c96c7728cfcccb"
- }
- Install-Python @Python39x86Config
- $Python39x64Config = @{
- PythonVersion = "3.9.0"
- PythonInstaller = "python-3.9.0-amd64"
- PythonInstallPath = "C:\Python39"
- PythonInstallerHash = "b61a33dc28f13b561452f3089c87eb63"
- }
- Install-Python @Python39x64Config
- # Python 3.10
- $Python310x86Config = @{
- PythonVersion = "3.10.0"
- PythonInstaller = "python-3.10.0rc1"
- PythonInstallPath = "C:\Python310_32bit"
- PythonInstallerHash = "6de353f2f7422aa030d4ccc788ffa75e"
- }
- Install-Python @Python310x86Config
- $Python310x64Config = @{
- PythonVersion = "3.10.0"
- PythonInstaller = "python-3.10.0rc1-amd64"
- PythonInstallPath = "C:\Python310"
- PythonInstallerHash = "39135519b044757f0a3b09d63612b0da"
- }
- Install-Python @Python310x64Config
|