diff --git a/python/python-rest/src/com/jetbrains/rest/sphinx/SphinxBaseCommand.java b/python/python-rest/src/com/jetbrains/rest/sphinx/SphinxBaseCommand.java index bcb0dd0643e9..b8c54a28e4d9 100644 --- a/python/python-rest/src/com/jetbrains/rest/sphinx/SphinxBaseCommand.java +++ b/python/python-rest/src/com/jetbrains/rest/sphinx/SphinxBaseCommand.java @@ -32,8 +32,8 @@ import java.awt.*; import java.util.Collections; import java.util.List; -import static com.jetbrains.python.sdk.PythonEnvUtil.PYTHONIOENCODING; -import static com.jetbrains.python.sdk.PythonEnvUtil.PYTHONUNBUFFERED; +import static com.jetbrains.python.sdk.PythonEnvUtil.setPythonIOEncoding; +import static com.jetbrains.python.sdk.PythonEnvUtil.setPythonUnbuffered; /** * User : catherine @@ -152,8 +152,8 @@ public class SphinxBaseCommand { } cmd.setPassParentEnvironment(true); - cmd.setEnvironment(PYTHONIOENCODING, "utf-8"); - cmd.setEnvironment(PYTHONUNBUFFERED, "1"); + setPythonIOEncoding(cmd.getEnvironment(), "utf-8"); + setPythonUnbuffered(cmd.getEnvironment()); List pathList = Lists.newArrayList(PythonCommandLineState.getAddedPaths(sdk)); pathList.addAll(PythonCommandLineState.collectPythonPath(module)); diff --git a/python/src/com/jetbrains/python/buildout/BuildoutFacet.java b/python/src/com/jetbrains/python/buildout/BuildoutFacet.java index 8c2622efea4b..5fae6a5be5f7 100644 --- a/python/src/com/jetbrains/python/buildout/BuildoutFacet.java +++ b/python/src/com/jetbrains/python/buildout/BuildoutFacet.java @@ -242,6 +242,7 @@ public class BuildoutFacet extends Facet implements } public void patchCommandLineForBuildout(GeneralCommandLine commandLine) { + Map env = commandLine.getEnvironment(); ParametersList params = commandLine.getParametersList(); // alter execution script ParamsGroup script_params = params.getParamsGroup(PythonCommandLineState.GROUP_SCRIPT); @@ -249,19 +250,18 @@ public class BuildoutFacet extends Facet implements if (script_params.getParameters().size() > 0) { String normal_script = script_params.getParameters().get(0); // expect DjangoUtil.MANAGE_FILE String engulfer_path = PythonHelpersLocator.getHelperPath("pycharm/buildout_engulfer.py"); - commandLine.setEnvironment("PYCHARM_ENGULF_SCRIPT", getConfiguration().getScriptName()); + env.put("PYCHARM_ENGULF_SCRIPT", getConfiguration().getScriptName()); script_params.getParametersList().replaceOrPrepend(normal_script, engulfer_path); } - // add pycharm helpers to pythonpath so that fixGetpass is importable - PythonEnvUtil.addToPythonPath(commandLine, PythonHelpersLocator.getHelpersRoot().getAbsolutePath()); + PythonEnvUtil.addToPythonPath(env, PythonHelpersLocator.getHelpersRoot().getAbsolutePath()); /* // set prependable paths List paths = facet.getAdditionalPythonPath(); if (paths != null) { path_value = PyUtil.joinWith(File.pathSeparator, paths); - new_env.put("PYCHARM_PREPEND_SYSPATH", path_value); + env.put("PYCHARM_PREPEND_SYSPATH", path_value); } */ } diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java index ce2efe1d5f64..ec4dcb2e9a86 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java @@ -272,7 +272,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory env = myConfig.getEnvs(); if (env == null) { env = new HashMap(); @@ -234,15 +231,20 @@ public abstract class PythonCommandLineState extends CommandLineState { else { env = new HashMap(env); } - addPredefinedEnvironmentVariables(env, passParentEnvironment); - commandLine.setEnvironment(env); - commandLine.setEnvironment(PythonEnvUtil.PYTHONUNBUFFERED, "1"); - commandLine.setEnvironment("PYCHARM_HOSTED", "1"); + addPredefinedEnvironmentVariables(env, myConfig.isPassParentEnvs()); + addCommonEnvironmentVariables(env); - commandLine.setPassParentEnvironment(passParentEnvironment); + commandLine.getEnvironment().clear(); + commandLine.getEnvironment().putAll(env); + commandLine.setPassParentEnvironment(myConfig.isPassParentEnvs()); - buildPythonPath(commandLine, passParentEnvironment); + buildPythonPath(commandLine, myConfig.isPassParentEnvs()); + } + + protected static void addCommonEnvironmentVariables(Map env) { + PythonEnvUtil.setPythonUnbuffered(env); + env.put("PYCHARM_HOSTED", "1"); } public void addPredefinedEnvironmentVariables(Map envs, boolean passParentEnvs) { @@ -270,9 +272,7 @@ public abstract class PythonCommandLineState extends CommandLineState { flavor.initPythonPath(commandLine, pathList); } else { - Map env = ContainerUtil.newHashMap(commandLine.getEnvironment()); - PythonSdkFlavor.initPythonPath(env, passParentEnvs, pathList); - commandLine.setEnvironment(env); + PythonSdkFlavor.initPythonPath(commandLine.getEnvironment(), passParentEnvs, pathList); } } diff --git a/python/src/com/jetbrains/python/run/PythonTask.java b/python/src/com/jetbrains/python/run/PythonTask.java index 3b340f19056e..71003b1177bc 100644 --- a/python/src/com/jetbrains/python/run/PythonTask.java +++ b/python/src/com/jetbrains/python/run/PythonTask.java @@ -25,6 +25,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * Base class for tasks which are run from PyCharm with results displayed in a toolwindow (manage.py, setup.py, Sphinx etc). @@ -112,6 +113,7 @@ public class PythonTask { assert scriptParams != null; cmd.setPassParentEnvironment(true); + Map env = cmd.getEnvironment(); if (!SystemInfo.isWindows && !PySdkUtil.isRemote(mySdk)) { cmd.setExePath("bash"); ParamsGroup bashParams = cmd.getParametersList().addParamsGroupAt(0, "Bash"); @@ -129,7 +131,7 @@ public class PythonTask { String pathKey = OSUtil.getPATHenvVariableName(); String sysPath = System.getenv().get(pathKey); if (pathKey != null && !StringUtil.isEmpty(sysPath)) { - cmd.setEnvironment(pathKey, OSUtil.appendToPATHenvVariable(null, sysPath)); + env.put(pathKey, OSUtil.appendToPATHenvVariable(null, sysPath)); } cmd.setExePath(homePath); @@ -137,7 +139,7 @@ public class PythonTask { scriptParams.addParameters(myParameters); } - cmd.setEnvironment(PythonEnvUtil.PYTHONUNBUFFERED, "1"); + PythonEnvUtil.setPythonUnbuffered(env); List pythonPath = setupPythonPath(); PythonCommandLineState.initPythonPath(cmd, true, pythonPath, homePath); diff --git a/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java b/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java index c2f0c8943896..2bfe192619bc 100644 --- a/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java +++ b/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java @@ -2,7 +2,6 @@ package com.jetbrains.python.sdk; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -64,11 +63,6 @@ public class PythonEnvUtil { } } - public static void addPathToEnv(@NotNull GeneralCommandLine cmd, @NotNull String key, @NotNull String value) { - String currentPath = cmd.getEnvironment().get(key); - cmd.setEnvironment(key, appendToPathEnvVar(currentPath, value)); - } - public static void addToPythonPath(@NotNull Map env, @NotNull Collection values) { addPathsToEnv(env, PYTHONPATH, values); } @@ -77,13 +71,8 @@ public class PythonEnvUtil { addPathToEnv(env, PYTHONPATH, value); } - public static void addToPythonPath(@NotNull GeneralCommandLine cmd, @NotNull String value) { - addPathToEnv(cmd, PYTHONPATH, value); - } - - @Nullable - public static List getPathListFromEnv(@NotNull GeneralCommandLine cmd, @NotNull String envKey) { - String pythonPath = cmd.getEnvironment().get(envKey); + public static List getPathListFromEnv(@NotNull Map env, String envKey) { + String pythonPath = env.get(envKey); return pythonPath != null ? Lists.newArrayList(pythonPath.split(File.pathSeparator)) : null; } } diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkType.java b/python/src/com/jetbrains/python/sdk/PythonSdkType.java index 25cda20afcd8..de51cfc51013 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkType.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkType.java @@ -337,8 +337,8 @@ public class PythonSdkType extends SdkType { } String virtualenvBin = bin.getPath(); - String pathValue; Map env = commandLine.getEnvironment(); + String pathValue; if (env.containsKey(PATH)) { pathValue = PythonEnvUtil.appendToPathEnvVar(env.get(PATH), virtualenvBin); } @@ -349,11 +349,10 @@ public class PythonSdkType extends SdkType { else { pathValue = virtualenvBin; } - commandLine.setEnvironment(PATH, pathValue); + env.put(PATH, pathValue); } } - public String suggestSdkName(final String currentSdkName, final String sdkHome) { String name = getVersionString(sdkHome); return suggestSdkNameFromVersion(sdkHome, name); diff --git a/python/src/com/jetbrains/python/sdk/flavors/IronPythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/flavors/IronPythonSdkFlavor.java index ae5817c3d45d..1113ca3bc453 100644 --- a/python/src/com/jetbrains/python/sdk/flavors/IronPythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/flavors/IronPythonSdkFlavor.java @@ -1,5 +1,6 @@ package com.jetbrains.python.sdk.flavors; +import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.openapi.util.text.StringUtil; import icons.PythonIcons; import org.jetbrains.annotations.NotNull; @@ -67,6 +68,11 @@ public class IronPythonSdkFlavor extends PythonSdkFlavor { return Collections.singletonList("-X:Frames"); } + @Override + public void initPythonPath(GeneralCommandLine cmd, Collection path) { + initPythonPath(path, cmd.getEnvironment()); + } + @Override public void initPythonPath(Collection path, Map env) { addToEnv("IRONPYTHONPATH", StringUtil.join(path, File.pathSeparator), env); diff --git a/python/src/com/jetbrains/python/sdk/flavors/JythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/flavors/JythonSdkFlavor.java index 7617792ff99f..2ae5f2c06d18 100644 --- a/python/src/com/jetbrains/python/sdk/flavors/JythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/flavors/JythonSdkFlavor.java @@ -41,8 +41,7 @@ public class JythonSdkFlavor extends PythonSdkFlavor { @Override public void initPythonPath(GeneralCommandLine cmd, Collection path) { - super.initPythonPath(cmd, path); - + initPythonPath(path, cmd.getEnvironment()); ParamsGroup paramGroup = cmd.getParametersList().getParamsGroup(PythonCommandLineState.GROUP_EXE_OPTIONS); assert paramGroup != null; for (String param : paramGroup.getParameters()) { diff --git a/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java index 2d4b04aa1c34..2af08b069bd1 100644 --- a/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/flavors/PythonSdkFlavor.java @@ -11,7 +11,6 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.intellij.util.PatternUtil; -import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.sdk.PySdkUtil; import com.jetbrains.python.sdk.PythonEnvUtil; @@ -192,18 +191,11 @@ public abstract class PythonSdkFlavor { } public void initPythonPath(GeneralCommandLine cmd, Collection path) { - Map env = ContainerUtil.newHashMap(cmd.getEnvironment()); - initPythonPath(path, env); - cmd.setEnvironment(env); + initPythonPath(path, cmd.getEnvironment()); } - public void initPythonPath(Collection path, Map env) { - path = appendSystemPythonPath(path); - addToEnv(PythonEnvUtil.PYTHONPATH, StringUtil.join(path, File.pathSeparator), env); - } - - public static void addToEnv(final String key, String value, Map env) { - PythonEnvUtil.addPathToEnv(env, key, value); + public static void addToEnv(final String key, String value, Map envs) { + PythonEnvUtil.addPathToEnv(envs, key, value); } @SuppressWarnings({"MethodMayBeStatic"}) @@ -230,4 +222,9 @@ public abstract class PythonSdkFlavor { public Icon getIcon() { return PythonIcons.Python.Python; } + + public void initPythonPath(Collection path, Map env) { + path = appendSystemPythonPath(path); + addToEnv(PythonEnvUtil.PYTHONPATH, StringUtil.join(path, File.pathSeparator), env); + } }