diff --git a/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java b/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java index 6514741fda45..5c440f5fad0d 100644 --- a/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java +++ b/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java @@ -1,5 +1,6 @@ package com.jetbrains.python.newProject.actions; +import com.intellij.execution.ExecutionException; import com.intellij.facet.ui.ValidationResult; import com.intellij.icons.AllIcons; import com.intellij.ide.impl.ProjectUtil; @@ -322,7 +323,13 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane String warningText = frameworkName + " will be installed on selected interpreter"; myInstallFramework = true; final PyPackageManager packageManager = PyPackageManager.getInstance(sdk); - if (!packageManager.hasManagement(PySdkUtil.isRemote(sdk))) { + boolean hasManagement = false; + try { + hasManagement = packageManager.hasManagement(PySdkUtil.isRemote(sdk)); + } + catch (ExecutionException ignored) { + } + if (!hasManagement) { warningText = "Python packaging tools and " + warningText; } setWarningText(warningText); diff --git a/python/openapi/src/com/jetbrains/python/packaging/PyPackageManager.java b/python/openapi/src/com/jetbrains/python/packaging/PyPackageManager.java index 770fb7037c56..add5b199016d 100644 --- a/python/openapi/src/com/jetbrains/python/packaging/PyPackageManager.java +++ b/python/openapi/src/com/jetbrains/python/packaging/PyPackageManager.java @@ -42,7 +42,7 @@ public abstract class PyPackageManager { } public abstract void installManagement() throws ExecutionException; - public abstract boolean hasManagement(boolean cachedOnly); + public abstract boolean hasManagement(boolean cachedOnly) throws ExecutionException; public abstract void install(@NotNull String requirementString) throws ExecutionException; public abstract void install(@NotNull List requirements, @NotNull List extraArgs) throws ExecutionException; public abstract void uninstall(@NotNull List packages) throws ExecutionException; diff --git a/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java b/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java index cc89d0b49444..300b91bf73c1 100644 --- a/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyPackageRequirementsInspection.java @@ -304,7 +304,13 @@ public class PyPackageRequirementsInspection extends PyInspection { public void applyFix(@NotNull final Project project, @NotNull ProblemDescriptor descriptor) { boolean installManagement = false; final PyPackageManager manager = PyPackageManager.getInstance(mySdk); - if (!manager.hasManagement(false)) { + boolean hasManagement = false; + try { + hasManagement = manager.hasManagement(false); + } + catch (ExecutionException ignored) { + } + if (!hasManagement) { final int result = Messages.showYesNoDialog(project, "Python packaging tools are required for installing packages. Do you want to " + "install 'pip' and 'setuptools' for your interpreter?", diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java index 21afa145fa46..2b78c69aee69 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java @@ -131,7 +131,7 @@ public class PyPackageManagerImpl extends PyPackageManager { } @Override - public boolean hasManagement(boolean cachedOnly) { + public boolean hasManagement(boolean cachedOnly) throws ExecutionException { return (hasPackage(SETUPTOOLS, cachedOnly) || hasPackage(DISTRIBUTE, cachedOnly)) && hasPackage(PIP, cachedOnly); } @@ -160,13 +160,8 @@ public class PyPackageManagerImpl extends PyPackageManager { return dirName; } - private boolean hasPackage(@NotNull String name, boolean cachedOnly) { - try { - return findPackage(name, cachedOnly) != null; - } - catch (ExecutionException ignored) { - return false; - } + private boolean hasPackage(@NotNull String name, boolean cachedOnly) throws ExecutionException { + return findPackage(name, cachedOnly) != null; } PyPackageManagerImpl(@NotNull Sdk sdk) { diff --git a/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java b/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java index 1d0ca880100e..1e4b05ecef2b 100644 --- a/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java +++ b/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java @@ -108,6 +108,9 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { catch (PyExecutionException e) { exception = e; } + catch (ExecutionException e) { + return; + } final PyExecutionException problem = exception; application.invokeLater(new Runnable() { @Override