public AddInterpreterView( PythonProjectNode project, IServiceProvider serviceProvider, IEnumerable<IPythonInterpreterFactory> selected ) { _project = project; Interpreters = new ObservableCollection<InterpreterView>(InterpreterView.GetInterpreters(serviceProvider, project)); var map = new Dictionary<IPythonInterpreterFactory, InterpreterView>(); foreach (var view in Interpreters) { map[view.Interpreter] = view; view.IsSelected = false; } foreach (var interp in selected) { InterpreterView view; if (map.TryGetValue(interp, out view)) { view.IsSelected = true; } else { view = new InterpreterView(interp, interp.Configuration.FullDescription, false); view.IsSelected = true; Interpreters.Add(view); } } _project.InterpreterFactoriesChanged += OnInterpretersChanged; }
public AddInterpreterView( IServiceProvider serviceProvider, IInterpreterOptionsService interpreterService, IEnumerable<IPythonInterpreterFactory> selected ) { _interpreterService = interpreterService; Interpreters = new ObservableCollection<InterpreterView>(InterpreterView.GetInterpreters(serviceProvider, interpreterService)); var map = new Dictionary<IPythonInterpreterFactory, InterpreterView>(); foreach (var view in Interpreters) { map[view.Interpreter] = view; view.IsSelected = false; } foreach (var interp in selected) { InterpreterView view; if (map.TryGetValue(interp, out view)) { view.IsSelected = true; } else { view = new InterpreterView(interp, interp.Description, false); view.IsSelected = true; Interpreters.Add(view); } } _interpreterService.InterpretersChanged += OnInterpretersChanged; }
internal async Task UpdateInterpreter(InterpreterView view) { if (!Dispatcher.CheckAccess()) { await Dispatcher.InvokeAsync(() => UpdateInterpreter(view)); return; } try { await _ready.WaitAsync(); } catch (ObjectDisposedException) { return; } try { WillInstallPip = false; WillInstallVirtualEnv = false; WillInstallElevated = false; MayNotSupportVirtualEnv = false; Debug.Assert(view != null); if (view == null) { return; } var interp = view.Interpreter; Debug.Assert(interp != null); if (interp == null) { return; } //MayNotSupportVirtualEnv = !SupportsVirtualEnv.Contains(interp.Id); RefreshCanCreateVirtualEnv(VirtualEnvPath); var libPath = interp.Configuration.LibraryPath; if (Directory.Exists(libPath)) { var installed = await interp.FindModulesAsync("pip", "virtualenv", "venv"); if (installed.Contains("venv") || installed.Contains("virtualenv")) { WillInstallPip = false; WillInstallVirtualEnv = false; UseVEnv = !installed.Contains("virtualenv"); } else { WillInstallPip = !installed.Contains("pip"); WillInstallVirtualEnv = true; UseVEnv = false; } WillInstallElevated = (WillInstallPip || WillInstallVirtualEnv) && _project.Site.GetPythonToolsService().GeneralOptions.ElevatePip; } } finally { try { _ready.Release(); } catch (ObjectDisposedException) { } } }
private void RefreshCanCreateVirtualEnv(string path) { if (!Dispatcher.CheckAccess()) { Dispatcher.BeginInvoke((Action)(() => RefreshCanCreateVirtualEnv(path))); return; } if (Interpreters.Count == 0) { WillCreateVirtualEnv = false; WillAddVirtualEnv = false; CannotCreateVirtualEnv = false; NoInterpretersInstalled = true; return; } if (!IsValidVirtualEnvPath(path) || BaseInterpreter == null) { WillCreateVirtualEnv = false; WillAddVirtualEnv = false; CannotCreateVirtualEnv = true; NoInterpretersInstalled = false; return; } if (Directory.Exists(path) && Directory.EnumerateFileSystemEntries(path).Any()) { WillCreateVirtualEnv = false; var config = VirtualEnv.FindInterpreterConfiguration(null, path, _interpreterService); if (config != null && File.Exists(config.InterpreterPath)) { var baseInterp = _interpreterService.FindInterpreter(config.Id); InterpreterView baseInterpView; if (baseInterp != null && (baseInterpView = Interpreters.FirstOrDefault(iv => iv.Interpreter == baseInterp)) != null) { if (_lastUserSelectedBaseInterpreter == null) { _lastUserSelectedBaseInterpreter = BaseInterpreter; } BaseInterpreter = baseInterpView; WillAddVirtualEnv = true; } else { WillAddVirtualEnv = false; } } else { WillAddVirtualEnv = false; } CannotCreateVirtualEnv = !WillAddVirtualEnv; NoInterpretersInstalled = false; } else { WillCreateVirtualEnv = true; WillAddVirtualEnv = false; CannotCreateVirtualEnv = false; NoInterpretersInstalled = false; if (_lastUserSelectedBaseInterpreter != null) { BaseInterpreter = _lastUserSelectedBaseInterpreter; _lastUserSelectedBaseInterpreter = null; } } }