From af99f9006db9f2ff8d698e287ad21b7b2e8d05ff Mon Sep 17 00:00:00 2001 From: Wolfgang Manousek Date: Thu, 12 Jan 2017 17:30:48 +0100 Subject: [PATCH] added ability to create 27 34 and 35 python environments support for the new vs15 drops of cntk --- Scripts/install/windows/_action.ps1 | 16 ++++++++------- Scripts/install/windows/_info.ps1 | 10 ++++----- Scripts/install/windows/_operations.ps1 | 27 ++++++++++--------------- Scripts/install/windows/_verify.ps1 | 5 ++--- Scripts/install/windows/install.ps1 | 14 ++++++++----- 5 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Scripts/install/windows/_action.ps1 b/Scripts/install/windows/_action.ps1 index 5260a631e..1d2a1dec8 100644 --- a/Scripts/install/windows/_action.ps1 +++ b/Scripts/install/windows/_action.ps1 @@ -89,14 +89,14 @@ function InstallYml( $env= $table["Env"] $ymlFile = $table["ymlFile"] - $envsDir = join-path $basePath "envs" - $targetDir = join-path $envsDir $env + $envsDir = Join-Path $basePath envs + $targetDir = Join-Path $envsDir $env if (test-path -path $targetDir -PathType Container) { - $newTable = @{ Function = "InstallExe"; Command = "$basepath\Scripts\conda.exe"; Param = "env update --file $ymlFile --name $targetDir"; WorkDir = "$basePath\Scripts"; runAs=$false } + $newTable = @{ Function = "InstallExe"; Command = "$basepath\Scripts\conda.exe"; Param = "env update --file `"$ymlFile`" --name `"$targetDir`""; WorkDir = "$basePath\Scripts"; runAs=$false } } else { - $newTable = @{ Function = "InstallExe"; Command = "$basepath\Scripts\conda.exe"; Param = "env create --file $ymlFile --prefix $targetDir"; WorkDir = "$basePath\Scripts"; runAs=$false } + $newTable = @{ Function = "InstallExe"; Command = "$basepath\Scripts\conda.exe"; Param = "env create --file `"$ymlFile`" --prefix `"$targetDir`""; WorkDir = "$basePath\Scripts"; runAs=$false } } InstallExe $newTable @@ -149,6 +149,7 @@ function InstallWheel( $EnvName = $table["EnvName"] $message = $table["message"] $whlDirectory = $table["WheelDirectory"] + $pyVersion = $table["PyVersion"] Write-Host $message if (-not $Execute) { @@ -156,8 +157,8 @@ function InstallWheel( return } - $whlFile = Get-ChildItem $cntkRootDir\cntk\Python\cntk*.whl - if ($whlFile -eq $null) { + $whlFile = Get-ChildItem $cntkRootDir\cntk\Python\cntk*cp$pyVersion-cp$pyVersion*.whl + if (-not $whlFile) { throw "No WHL file found at $cntkRootDir\cntk\Python" } if ($whlFile.Count -gt 1) { @@ -260,6 +261,7 @@ function CreateBatch( $func = $table["Function"] $filename = $table["Filename"] + $pyVersion = $table["PyVersion"] if (-not $Execute) { Write-Host "Create-Batch [$filename]:No-Execute flag. No file created" @@ -277,7 +279,7 @@ if /I "%CMDCMDLINE%" neq ""%COMSPEC%" " ( exit /b 0 ) set PATH=$cntkRootDir\cntk;%PATH% -"$AnacondaBasePath\Scripts\activate" "$AnacondaBasePath\envs\cntk-py34" +"$AnacondaBasePath\Scripts\activate" "$AnacondaBasePath\envs\cntk-py$pyVersion" "@ add-content -Path $filename -Encoding Ascii -Value $batchScript diff --git a/Scripts/install/windows/_info.ps1 b/Scripts/install/windows/_info.ps1 index ce6ec6dc7..038f3412a 100644 --- a/Scripts/install/windows/_info.ps1 +++ b/Scripts/install/windows/_info.ps1 @@ -32,11 +32,11 @@ The script will analyse your machine and will determine which components are req The required components will be downloaded in [$localCache] Repeated operation of this script will reuse already downloaded components. - - If required VS2012 Runtime and VS2013 Runtime will be installed + - If required VS2015 Runtime will be installed - If required MSMPI will be installed - Anaconda3 will be installed into [$AnacondaBasePath] - - A CNTK-PY34 environment will be created or updated in [$AnacondaBasePath\envs] - - CNTK will be installed or updated in the CNTK-PY34 environment + - A CNTK-PY$PyVersion environment will be created or updated in [$AnacondaBasePath\envs] + - CNTK will be installed or updated in the CNTK-PY$PyVersion environment " } @@ -108,7 +108,7 @@ function DisplayStart() CheckOSVersion if (-not $Execute) { - Write-Host $(DisplayWarningNoExecuteMessage) + Write-Warning $(DisplayWarningNoExecuteMessage) } Write-Host $(DisplayStartContinueMessage) @@ -131,7 +131,7 @@ Write-Host " CNTK v2 Python install complete. To activate the CNTK Python environment and set the PATH to include CNTK, start a command shell and run - $cntkRootDir\scripts\cntkpy34.bat + $cntkRootDir\scripts\cntkpy$PyVersion.bat Please checkout tutorials and examples here: $cntkRootDir\Tutorials diff --git a/Scripts/install/windows/_operations.ps1 b/Scripts/install/windows/_operations.ps1 index c69e71f2e..ca806424d 100644 --- a/Scripts/install/windows/_operations.ps1 +++ b/Scripts/install/windows/_operations.ps1 @@ -10,15 +10,10 @@ $operations = @( @{Name = "Verifying Installation contents"; ShortName = "INSTCONTENT"; Info = "Verifying Installation contents"; Verification = @( @{Function = "VerifyInstallationContent"; Path = "$cntkRootDir" } ) }, - @{Name = "Installation VS2012 Runtime"; ShortName = "VS2012"; Info = "Install VS2012 Runtime"; - Verification = @( @{Function = "VerifyWin32ProductExists"; Match = "^Microsoft Visual C\+\+ 2012 x64 Additional Runtime" }, - @{Function = "VerifyWin32ProductExists"; Match = "^Microsoft Visual C\+\+ 2012 x64 Minimum Runtime" } ); - Action = @( @{Function = "InstallExe"; Command = "$cntkRootDir\prerequisites\VS2012\vcredist_x64.exe"; Param = "/install /passive /norestart"; Message="Installing VS2012 Runtime...." } ) - }, - @{Name = "Installation VS2013 Runtime"; ShortName = "VS2013"; Info = "Install VS2013 Runtime"; - Verification = @( @{Function = "VerifyWin32ProductExists"; Match = "^Microsoft Visual C\+\+ 2013 x64 Additional Runtime" }, - @{Function = "VerifyWin32ProductExists"; Match = "^Microsoft Visual C\+\+ 2013 x64 Minimum Runtime" } ); - Action = @( @{Function = "InstallExe"; Command = "$cntkRootDir\prerequisites\VS2013\vcredist_x64.EXE"; Param = "/install /passive /norestart"; Message="Installing VS2013 Runtime...." } ) + @{Name = "Installation VS2015 Runtime"; ShortName = "VS2015"; Info = "Install VS2015 Runtime"; + Verification = @( @{Function = "VerifyWin32ProductExists"; Match = "^Microsoft Visual C\+\+ 2015 x64 Additional Runtime" }, + @{Function = "VerifyWin32ProductExists"; Match = "^Microsoft Visual C\+\+ 2015 x64 Minimum Runtime" } ); + Action = @( @{Function = "InstallExe"; Command = "$cntkRootDir\prerequisites\VS2015\vc_redist.x64.exe"; Param = "/install /passive /norestart"; Message="Installing VS2015 Runtime...." } ) }, @{Name = "MSMPI Installation"; ShortName = "CNTK"; Info = "Install MSMPI"; Verification = @( @{Function = "VerifyWin32ProductVersion"; Match = "^Microsoft MPI \(\d+\."; Version = "7.0.12437.6" } ); @@ -29,16 +24,16 @@ $operations = @( Download = @( @{Function = "Download"; Source = "https://repo.continuum.io/archive/Anaconda3-4.1.1-Windows-x86_64.exe"; Destination = "$localCache\Anaconda3-4.1.1-Windows-x86_64.exe" } ); Action = @( @{Function = "InstallExe"; Command = "$localCache\Anaconda3-4.1.1-Windows-x86_64.exe"; Param = "/InstallationType=JustMe /AddToPath=0 /RegisterPython=0 /S /D=$AnacondaBasePath"; runAs=$false; Message="Installing Anaconda3-4.1.1. This will take several minutes. Please be patient ...."} ); }, - @{Name = "CNTK Python Environment 3.4"; ShortName = "CNTKPY34"; Info = "Setup CNTK PythonEnvironment 3.4"; + @{Name = "CNTK Python Environment"; ShortName = "CNTKPY"; Info = "Setup CNTK PythonEnvironment $PyVersion"; Verification = @( @{Function = "VerifyRunAlways" } ); - Action = @( @{Function = "InstallYml"; BasePath = $AnacondaBasePath; Env = "cntk-py34"; ymlFile= "$MyDir\conda-windows-cntk-py34-environment.yml" } ) + Action = @( @{Function = "InstallYml"; BasePath = $AnacondaBasePath; Env = "cntk-py$PyVersion"; ymlFile= "$MyDir\conda-windows-cntk-py$PyVersion-environment.yml"; PyVersion = $PyVersion } ) }, - @{Name = "CNTK WHL Install"; ShortName = "CNTKWHL34"; Info = "Setup/Update CNTK Wheel"; + @{Name = "CNTK WHL Install"; ShortName = "CNTKWHL"; Info = "Setup/Update CNTK Wheel $PyVersion"; Verification = @( @{Function = "VerifyRunAlways" } ); - Action = @( @{Function = "InstallWheel"; BasePath = "$AnacondaBasePath"; EnvName = "cntk-py34"; WheelDirectory="$AnacondaBasePath\envs\cntk-py34\Lib\site-packages\cntk"; Message="Setup/Update of CNTK Wheel environment. Please be patient...." } ) + Action = @( @{Function = "InstallWheel"; BasePath = "$AnacondaBasePath"; EnvName = "cntk-py$PyVersion"; WheelDirectory="$AnacondaBasePath\envs\cntk-py$PyVersion\Lib\site-packages\cntk"; PyVersion = $PyVersion; Message="Setup/Update of CNTK Wheel $PyVersion environment. Please be patient...." } ) }, - @{Name = "Create CNTKPY34 batch file"; ShortName = "BATCH34"; Info = "Create CNTKPY34 batch file"; - Verification = @( @{Function = "VerifyFile"; Path = "$cntkRootDir\scripts\cntkpy34.bat" } ); - Action = @( @{Function = "CreateBatch"; Filename = "$cntkRootDir\scripts\cntkpy34.bat" } ) + @{Name = "Create CNTKPY batch file"; ShortName = "BATCH"; Info = "Create CNTKPY batch file"; + Verification = @( @{Function = "VerifyFile"; Path = "$cntkRootDir\scripts\cntkpy$PyVersion.bat"; PyVersion = $PyVersion } ); + Action = @( @{Function = "CreateBatch"; Filename = "$cntkRootDir\scripts\cntkpy$PyVersion.bat"; PyVersion = $PyVersion } ) } ) diff --git a/Scripts/install/windows/_verify.ps1 b/Scripts/install/windows/_verify.ps1 index ad9cb39a6..d793cc29f 100644 --- a/Scripts/install/windows/_verify.ps1 +++ b/Scripts/install/windows/_verify.ps1 @@ -127,8 +127,7 @@ function VerifyInstallationContent( $path = $table["Path"] $noInstallRequired = (join-path $path cntk\cntk.exe | test-path -PathType Leaf) - $noInstallRequired = (join-path $path prerequisites\VS2012\vcredist_x64.exe | test-path -PathType Leaf) -and $noInstallRequired - $noInstallRequired = (join-path $path prerequisites\VS2013\vcredist_x64.exe | test-path -PathType Leaf) -and $noInstallRequired + $noInstallRequired = (join-path $path prerequisites\VS2015\vc_redist.x64.exe | test-path -PathType Leaf) -and $noInstallRequired $noInstallRequired = (join-path $path prerequisites\MSMpiSetup.exe | test-path -PathType Leaf) -and $noInstallRequired if ($noInstallRequired) { @@ -136,7 +135,7 @@ function VerifyInstallationContent( return $noInstallRequired } - throw "`nFatal Error: Files from CNTK binary download package are missing!`nThe install script must be run out of the unpacked binary CNTK package, not from a CNTK source clone." + throw "`nFatal Error: Files from the CNTK binary download package are missing!`nThe install script must be run out of the unpacked binary CNTK package, not from a CNTK source clone." } function VerifyDirectory( diff --git a/Scripts/install/windows/install.ps1 b/Scripts/install/windows/install.ps1 index d447c4e21..3c943f57f 100644 --- a/Scripts/install/windows/install.ps1 +++ b/Scripts/install/windows/install.ps1 @@ -14,11 +14,11 @@ The required components will be downloaded and cached. Repeated operation of this script will reuse already downloaded components. - - If required VS2012 Runtime and VS2013 Runtime will be installed + - If required VS2015 Runtime will be installed - If required MSMPI will be installed - Anaconda3 will be installed into [] - - A CNTK-PY34 environment will be created or updated in [\envs] - - CNTK will be installed or updated in the CNTK-PY34 environment + - A CNTK-PY environment will be created or updated in [\envs] + - CNTK will be installed or updated in the CNTK-PY environment .PARAMETER Execute This is an optional parameter. Without setting this switch, no changes to the machine setup/installation will be performed @@ -27,6 +27,10 @@ This is an optional parameter and can be used to specify an already installed Anaconda3 installation. By default a version of Anaconda3 will be installed into [C:\local\Anaconda3-4.1.1-Windows-x86_64] + .PARAMETER PyVersion + This is an optional parameter and can be used to specify the Python version to be used for the CNTK Python environment. + Allowed values for this parameter are 27 34 or 35. The default values is 34 (for a CNTK Python 34 environment) + .EXAMPLE .\install.ps1 @@ -46,8 +50,8 @@ [CmdletBinding()] Param( [parameter(Mandatory=$false)] [string] $AnacondaBasePath = "C:\local\Anaconda3-4.1.1-Windows-x86_64", - [parameter(Mandatory=$false)] [switch] $Execute -) + [parameter(Mandatory=$false)] [ValidateSet("27", "34", "35")] [string] $PyVersion = "34", + [parameter(Mandatory=$false)] [switch] $Execute) $MyDir = Split-Path $MyInvocation.MyCommand.Definition