/// <summary> /// Creates a virtual environment. If virtualenv or pip are not /// installed then they are downloaded and installed automatically. /// </summary> public static async Task CreateAndInstallDependencies( IServiceProvider provider, IPythonInterpreterFactory factory, string path, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); var modules = await factory.FindModulesAsync("pip", "virtualenv", "venv"); bool hasPip = modules.Contains("pip"); bool hasVirtualEnv = modules.Contains("virtualenv") || modules.Contains("venv"); if (!hasVirtualEnv) { if (!hasPip) { bool elevate = provider.GetPythonToolsService().GeneralOptions.ElevatePip; await Pip.InstallPip(provider, factory, elevate, output); } if (!await Install(provider, factory, output)) { throw new InvalidOperationException(Strings.VirtualEnvCreationFailed.FormatUI(path)); } } await ContinueCreate(provider, factory, path, false, output); }
public static async Task <bool> QueryInstall( IPythonInterpreterFactory factory, string package, IServiceProvider site, string message, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (Microsoft.VisualStudio.Shell.VsShellUtilities.ShowMessageBox( site, message, null, OLEMSGICON.OLEMSGICON_QUERY, OLEMSGBUTTON.OLEMSGBUTTON_OKCANCEL, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST ) == 2) { throw new OperationCanceledException(); } return(await Install(site, factory, package, elevate, output)); }
private static ProcessOutput Run( IPythonInterpreterFactory factory, Redirector output, bool elevate, params string[] cmd ) { factory.ThrowIfNotRunnable("factory"); IEnumerable<string> args; if (factory.Configuration.Version >= SupportsDashMPip) { args = new[] { "-m", "pip" }.Concat(cmd); } else { // Manually quote the code, since we are passing false to // quoteArgs below. args = new[] { "-c", "\"import pip; pip.main()\"" }.Concat(cmd); } return ProcessOutput.Run( factory.Configuration.InterpreterPath, args, factory.Configuration.PrefixPath, UnbufferedEnv, false, output, quoteArgs: false, elevate: elevate ); }
private static ProcessOutput Run( IPythonInterpreterFactory factory, Redirector output, bool elevate, params string[] cmd ) { factory.ThrowIfNotRunnable("factory"); IEnumerable <string> args; if (factory.Configuration.Version >= SupportsDashMPip) { args = new[] { "-m", "pip" }.Concat(cmd); } else { // Manually quote the code, since we are passing false to // quoteArgs below. args = new[] { "-c", "\"import pip; pip.main()\"" }.Concat(cmd); } return(ProcessOutput.Run( factory.Configuration.InterpreterPath, args, factory.Configuration.PrefixPath, UnbufferedEnv, false, output, quoteArgs: false, elevate: elevate )); }
/// <summary> /// Creates a virtual environment using virtualenv. If virtualenv or pip /// are not installed then they are downloaded and installed automatically. /// </summary> public static async Task CreateWithVirtualEnv( IServiceProvider provider, IPythonInterpreterFactory factory, string path ) { if (provider == null) { throw new ArgumentNullException(nameof(provider)); } if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } factory.ThrowIfNotRunnable(nameof(factory)); var cancel = CancellationToken.None; var ui = new VsPackageManagerUI(provider); var interpreterOpts = provider.GetComponentModel().GetService <IInterpreterOptionsService>(); var pm = interpreterOpts?.GetPackageManagers(factory).FirstOrDefault(p => p.UniqueKey == "pip"); if (pm == null) { throw new InvalidOperationException(Strings.PackageManagementNotSupported); } if (!pm.IsReady) { await pm.PrepareAsync(ui, cancel); if (!pm.IsReady) { throw new InvalidOperationException(Strings.VirtualEnvCreationFailed.FormatUI(path)); } } bool hasVirtualEnv = (await factory.HasModuleAsync("venv", interpreterOpts)) || (await factory.HasModuleAsync("virtualenv", interpreterOpts)); if (!hasVirtualEnv) { if (!await Install(provider, factory)) { throw new InvalidOperationException(Strings.VirtualEnvCreationFailed.FormatUI(path)); } } await ContinueCreate(provider, factory, path, false, PackageManagerUIRedirector.Get(pm, ui)); }
public static async Task <bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, string package, IServiceProvider site, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); bool isScript; if (site != null && GetEasyInstallPath(factory, out isScript) == null) { await Pip.QueryInstallPip(factory, site, Strings.InstallEasyInstall, elevate, output); } if (output != null) { output.WriteLine(Strings.PackageInstalling.FormatUI(package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } var exitCode = await ContinueRun(factory, output, elevate, package); if (output != null) { if (exitCode == 0) { output.WriteLine(Strings.PackageInstallSucceeded.FormatUI(package)); } else { output.WriteLine(Strings.PackageInstallFailedExitCode.FormatUI(package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return(exitCode == 0); }
public static async Task Install( IPythonInterpreterFactory factory, string package, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); await ContinueRun(factory, output, elevate, package); }
private static string GetEasyInstallPath(IPythonInterpreterFactory factory, out bool isScript) { factory.ThrowIfNotRunnable("factory"); foreach (var path in EasyInstallLocations) { string easyInstallPath = Path.Combine(factory.Configuration.PrefixPath, path.Key); isScript = path.Value; if (File.Exists(easyInstallPath)) { return easyInstallPath; } } isScript = false; return null; }
public static async Task InstallPip(IServiceProvider provider, IPythonInterpreterFactory factory, bool elevate, Redirector output = null) { factory.ThrowIfNotRunnable("factory"); var pipDownloaderPath = PythonToolsInstallPath.GetFile("pip_downloader.py"); if (output != null) { output.WriteLine(Strings.PipInstalling); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = ProcessOutput.Run( factory.Configuration.InterpreterPath, new[] { pipDownloaderPath }, factory.Configuration.PrefixPath, null, false, output, elevate: elevate )) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(Strings.PipInstallSucceeded); } else { output.WriteLine(Strings.PipInstallFailedExitCode.FormatUI(exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } } }
public static async Task <bool> Uninstall( IServiceProvider provider, IPythonInterpreterFactory factory, string package, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (output != null) { output.WriteLine(Strings.PackageUninstalling.FormatUI(package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = Run(factory, output, elevate, "uninstall", "-y", package)) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(Strings.PackageUninstallSucceeded.FormatUI(package)); } else { output.WriteLine(Strings.PackageUninstallFailedExitCode.FormatUI(package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return(exitCode == 0); } }
private static string GetEasyInstallPath(IPythonInterpreterFactory factory, out bool isScript) { factory.ThrowIfNotRunnable("factory"); foreach (var path in EasyInstallLocations) { string easyInstallPath = Path.Combine(factory.Configuration.PrefixPath, path.Key); isScript = path.Value; if (File.Exists(easyInstallPath)) { return(easyInstallPath); } } isScript = false; return(null); }
public static async Task <bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, string package, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (!(await factory.FindModulesAsync("pip")).Any()) { await InstallPip(provider, factory, elevate, output); } using (var proc = Run(factory, output, elevate, "install", GetInsecureArg(factory, output), package)) { await proc; return(proc.ExitCode == 0); } }
/// <summary> /// Creates a virtual environment. If virtualenv is not installed, the /// task will succeed but error text will be passed to the redirector. /// </summary> public static Task Create(IServiceProvider provider, IPythonInterpreterFactory factory, string path, Redirector output = null) { if (provider == null) { throw new ArgumentNullException(nameof(provider)); } if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } factory.ThrowIfNotRunnable(nameof(factory)); return(ContinueCreate(provider, factory, path, false, output)); }
/// <summary> /// Creates a virtual environment. If virtualenv or pip are not /// installed then they are downloaded and installed automatically. /// </summary> public static async Task CreateAndInstallDependencies( IServiceProvider provider, IPythonInterpreterFactory factory, string path ) { factory.ThrowIfNotRunnable("factory"); var cancel = CancellationToken.None; var ui = new VsPackageManagerUI(provider); var pm = factory.PackageManager; if (pm == null) { throw new InvalidOperationException(Strings.PackageManagementNotSupported); } if (!pm.IsReady) { await pm.PrepareAsync(ui, cancel); if (!pm.IsReady) { throw new InvalidOperationException(Strings.VirtualEnvCreationFailed.FormatUI(path)); } } var modules = await factory.FindModulesAsync("virtualenv", "venv"); bool hasVirtualEnv = modules.Contains("virtualenv") || modules.Contains("venv"); if (!hasVirtualEnv) { if (!await Install(provider, factory)) { throw new InvalidOperationException(Strings.VirtualEnvCreationFailed.FormatUI(path)); } } await ContinueCreate(provider, factory, path, false, PackageManagerUIRedirector.Get(pm, ui)); }
/// <summary> /// Creates a virtual environment using venv. If venv is not available, /// the task will succeed but error text will be passed to the /// redirector. /// </summary> public static Task CreateWithVEnv( IServiceProvider provider, IPythonInterpreterFactory factory, string path ) { if (provider == null) { throw new ArgumentNullException(nameof(provider)); } if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } factory.ThrowIfNotRunnable(); return(ContinueCreate(provider, factory, path, true, OutputWindowRedirector.GetGeneral(provider))); }
public static async Task<bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, string package, IServiceProvider site, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); bool isScript; if (site != null && GetEasyInstallPath(factory, out isScript) == null) { await Pip.QueryInstallPip(factory, site, Strings.InstallEasyInstall, elevate, output); } if (output != null) { output.WriteLine(Strings.PackageInstalling.FormatUI(package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } var exitCode = await ContinueRun(factory, output, elevate, package); if (output != null) { if (exitCode == 0) { output.WriteLine(Strings.PackageInstallSucceeded.FormatUI(package)); } else { output.WriteLine(Strings.PackageInstallFailedExitCode.FormatUI(package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return exitCode == 0; }
/// <summary> /// Creates a virtual environment using venv. If venv is not available, /// the task will succeed but error text will be passed to the /// redirector. /// </summary> public static Task CreateWithVEnv(IServiceProvider provider, IPythonInterpreterFactory factory, string path) { factory.ThrowIfNotRunnable(); return(ContinueCreate(provider, factory, path, true, OutputWindowRedirector.GetGeneral(provider))); }
public static async Task QueryInstallPip( IPythonInterpreterFactory factory, IServiceProvider site, string message, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (Microsoft.VisualStudio.Shell.VsShellUtilities.ShowMessageBox( site, message, null, OLEMSGICON.OLEMSGICON_QUERY, OLEMSGBUTTON.OLEMSGBUTTON_OKCANCEL, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST ) == 2) { throw new OperationCanceledException(); } await InstallPip(site, factory, elevate, output); }
public static async Task<bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, string package, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (!(await factory.FindModulesAsync("pip")).Any()) { await InstallPip(provider, factory, elevate, output); } using (var proc = Run(factory, output, elevate, "install", GetInsecureArg(factory, output), package)) { await proc; return proc.ExitCode == 0; } }
/// <summary> /// Creates a virtual environment. If virtualenv is not installed, the /// task will succeed but error text will be passed to the redirector. /// </summary> public static Task Create(IServiceProvider provider, IPythonInterpreterFactory factory, string path, Redirector output = null) { factory.ThrowIfNotRunnable(); return(ContinueCreate(provider, factory, path, false, output)); }
public static async Task<bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, string package, IServiceProvider site, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (!(await factory.FindModulesAsync("pip")).Any()) { if (site != null) { try { await QueryInstallPip(factory, site, SR.GetString(SR.InstallPip), elevate, output); } catch (OperationCanceledException) { return false; } } else { await InstallPip(provider, factory, elevate, output); } } if (output != null) { output.WriteLine(SR.GetString(SR.PackageInstalling, package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = Run(factory, output, elevate, "install", GetInsecureArg(factory, output), package)) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(SR.GetString(SR.PackageInstallSucceeded, package)); } else { output.WriteLine(SR.GetString(SR.PackageInstallFailedExitCode, package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return exitCode == 0; } }
public static async Task InstallPip(IServiceProvider provider, IPythonInterpreterFactory factory, bool elevate, Redirector output = null) { factory.ThrowIfNotRunnable("factory"); var pipDownloaderPath = PythonToolsInstallPath.GetFile("pip_downloader.py"); if (output != null) { output.WriteLine(SR.GetString(SR.PipInstalling)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = ProcessOutput.Run( factory.Configuration.InterpreterPath, new[] { pipDownloaderPath }, factory.Configuration.PrefixPath, null, false, output, elevate: elevate )) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(SR.GetString(SR.PipInstallSucceeded)); } else { output.WriteLine(SR.GetString(SR.PipInstallFailedExitCode, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } } }
public static async Task<bool> Uninstall( IServiceProvider provider, IPythonInterpreterFactory factory, string package, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (output != null) { output.WriteLine(SR.GetString(SR.PackageUninstalling, package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = Run(factory, output, elevate, "uninstall", "-y", package)) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(SR.GetString(SR.PackageUninstallSucceeded, package)); } else { output.WriteLine(SR.GetString(SR.PackageUninstallFailedExitCode, package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return exitCode == 0; } }
/// <summary> /// Creates a virtual environment. If virtualenv is not installed, the /// task will succeed but error text will be passed to the redirector. /// </summary> public static Task Create(IServiceProvider provider, IPythonInterpreterFactory factory, string path, Redirector output = null) { factory.ThrowIfNotRunnable(); return ContinueCreate(provider, factory, path, false, output); }
public static async Task <bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, string package, IServiceProvider site, bool elevate, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); if (!(await factory.FindModulesAsync("pip")).Any()) { if (site != null) { try { await QueryInstallPip(factory, site, Strings.InstallPip, elevate, output); } catch (OperationCanceledException) { return(false); } } else { await InstallPip(provider, factory, elevate, output); } } if (output != null) { output.WriteLine(Strings.PackageInstalling.FormatUI(package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = Run(factory, output, elevate, "install", GetInsecureArg(factory, output), package)) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(Strings.PackageInstallSucceeded.FormatUI(package)); } else { output.WriteLine(Strings.PackageInstallFailedExitCode.FormatUI(package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return(exitCode == 0); } }
/// <summary> /// Creates a virtual environment. If virtualenv or pip are not /// installed then they are downloaded and installed automatically. /// </summary> public static async Task CreateAndInstallDependencies( IServiceProvider provider, IPythonInterpreterFactory factory, string path, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); var modules = await factory.FindModulesAsync("pip", "virtualenv", "venv"); bool hasPip = modules.Contains("pip"); bool hasVirtualEnv = modules.Contains("virtualenv") || modules.Contains("venv"); if (!hasVirtualEnv) { if (!hasPip) { bool elevate = provider.GetPythonToolsService().GeneralOptions.ElevatePip; await Pip.InstallPip(provider, factory, elevate, output); } if (!await Install(provider, factory, output)) { throw new InvalidOperationException(SR.GetString(SR.VirtualEnvCreationFailed, path)); } } await ContinueCreate(provider, factory, path, false, output); }
public static async Task <bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, IInterpreterOptionsService service, string package, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); var condaFactory = await TryGetCondaFactoryAsync(factory, service);; if (condaFactory == null) { throw new InvalidOperationException("Cannot find conda"); } condaFactory.ThrowIfNotRunnable(); if (output != null) { output.WriteLine(SR.GetString(SR.PackageInstalling, package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = ProcessOutput.Run( condaFactory.Configuration.InterpreterPath, new[] { "-m", "conda", "install", "--yes", "-n", factory.Configuration.PrefixPath, package }, factory.Configuration.PrefixPath, UnbufferedEnv, false, output )) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(SR.GetString(SR.PackageInstallSucceeded, package)); } else { output.WriteLine(SR.GetString(SR.PackageInstallFailedExitCode, package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return(exitCode == 0); } }
public static async Task<bool> Install( IServiceProvider provider, IPythonInterpreterFactory factory, IInterpreterOptionsService service, string package, Redirector output = null ) { factory.ThrowIfNotRunnable("factory"); var condaFactory = await TryGetCondaFactoryAsync(factory, service); ; if (condaFactory == null) { throw new InvalidOperationException("Cannot find conda"); } condaFactory.ThrowIfNotRunnable(); if (output != null) { output.WriteLine(SR.GetString(SR.PackageInstalling, package)); if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } using (var proc = ProcessOutput.Run( condaFactory.Configuration.InterpreterPath, new[] { "-m", "conda", "install", "--yes", "-n", factory.Configuration.PrefixPath, package }, factory.Configuration.PrefixPath, UnbufferedEnv, false, output )) { var exitCode = await proc; if (output != null) { if (exitCode == 0) { output.WriteLine(SR.GetString(SR.PackageInstallSucceeded, package)); } else { output.WriteLine(SR.GetString(SR.PackageInstallFailedExitCode, package, exitCode)); } if (provider.GetPythonToolsService().GeneralOptions.ShowOutputWindowForPackageInstallation) { output.ShowAndActivate(); } else { output.Show(); } } return exitCode == 0; } }
/// <summary> /// Creates a virtual environment using venv. If venv is not available, /// the task will succeed but error text will be passed to the /// redirector. /// </summary> public static Task CreateWithVEnv(IServiceProvider provider, IPythonInterpreterFactory factory, string path) { factory.ThrowIfNotRunnable(); return ContinueCreate(provider, factory, path, true, OutputWindowRedirector.GetGeneral(provider)); }