in src/main/groovy/com/jetbrains/python/envs/PythonEnvsPlugin.groovy [205:262]
private Task createPythonWindowsTask(Project project, Python env) {
return project.tasks.create(name: "Bootstrap_${env.type}_'$env.name'") {
onlyIf {
isWindows && (!env.envDir.exists() || isPythonInvalid(project, env))
}
doFirst {
project.buildDir.mkdir()
env.envDir.mkdirs()
env.envDir.deleteDir()
}
doLast {
project.logger.quiet("Creating $env.type '$env.name' at $env.envDir directory")
try {
String extension = VersionNumber.parse(env.version) >= VersionNumber.parse("3.5.0") ? "exe" : "msi"
String filename = "python-${env.version}${env.is64 ? (extension == "msi" ? "." : "-") + "amd64" : ""}.$extension"
File installer = new File(project.buildDir, filename)
project.logger.quiet("Downloading $installer")
project.ant.get(dest: installer) {
url(url: "https://www.python.org/ftp/python/${env.version}/$filename")
}
project.logger.quiet("Installing $env.name")
if (extension == "msi") {
project.exec {
commandLine "msiexec", "/i", installer, "/quiet", "TARGETDIR=$env.envDir.absolutePath"
}
} else if (extension == "exe") {
project.mkdir(env.envDir)
project.exec {
executable installer
args installer, "/i", "/quiet", "TargetDir=$env.envDir.absolutePath", "Include_launcher=0",
"InstallLauncherAllUsers=0", "Shortcuts=0", "AssociateFiles=0"
}
}
if (!getExecutable("pip", env).exists()) {
project.logger.quiet("Downloading & installing pip and setuptools")
project.exec {
executable getExecutable("python", env)
args getPipFile(project, env.version)
}
}
// It's better to save installer for good uninstall
// installer.delete()
}
catch (Exception e) {
project.logger.error(e.message)
throw new GradleException(e.message)
}
pipInstall(project, env, env.packages)
}
}
}