private Task createPythonWindowsTask()

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)
            }
        }
    }