diff --git a/python/helpers/generator3.py b/python/helpers/generator3.py index 737b29f15a6c..d09f6d918e18 100644 --- a/python/helpers/generator3.py +++ b/python/helpers/generator3.py @@ -1,12 +1,6 @@ # encoding: utf-8 import atexit import zipfile -import sys - - -if hasattr(sys, 'dont_write_bytecode'): - sys.dont_write_bytecode = True - # TODO: Move all CLR-specific functions to clr_tools diff --git a/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java b/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java index e533f98609e9..f74be9bdaf9d 100644 --- a/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java +++ b/python/src/com/jetbrains/python/documentation/PyStructuredDocstringFormatter.java @@ -28,6 +28,7 @@ import com.intellij.psi.PsiElement; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.psi.StructuredDocString; import com.jetbrains.python.sdk.PySdkUtil; +import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; import com.jetbrains.python.toolbox.Substring; import org.jetbrains.annotations.NotNull; @@ -37,7 +38,9 @@ import java.io.File; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author yole @@ -105,9 +108,11 @@ public class PyStructuredDocstringFormatter { final byte[] data = new byte[encoded.limit()]; encoded.get(data); + final Map env = new HashMap(); + PythonEnvUtil.setPythonDontWriteBytecode(env); final ProcessOutput output = PySdkUtil.getProcessOutput(new File(sdkHome).getParent(), new String[]{sdkHome, formatter}, - null, 5000, data, true); + env, 5000, data, true); if (output.isTimeout()) { LOG.info("timeout when calculating docstring"); return null; diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java index e85a5a80a45a..d949fe54a036 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java @@ -15,7 +15,6 @@ */ package com.jetbrains.python.packaging; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.intellij.execution.ExecutionException; import com.intellij.execution.RunCanceledByUserException; @@ -49,6 +48,7 @@ import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyListLiteralExpression; import com.jetbrains.python.psi.PyStringLiteralExpression; import com.jetbrains.python.sdk.PySdkUtil; +import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -469,7 +469,9 @@ public class PyPackageManagerImpl extends PyPackageManager { try { final Process process; - final Map environment = PySdkUtil.mergeEnvVariables(System.getenv(), ImmutableMap.of("PYTHONUNBUFFERED", "1")); + final Map environment = new HashMap(System.getenv()); + PythonEnvUtil.setPythonUnbuffered(environment); + PythonEnvUtil.setPythonDontWriteBytecode(environment); final GeneralCommandLine commandLine = new GeneralCommandLine(cmdline).withWorkDirectory(workingDir).withEnvironment(environment); if (useSudo) { process = ExecUtil.sudo(commandLine, "Please enter your password to make changes in system packages: "); diff --git a/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java b/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java index 50c4881c3a2d..7b4184fd00a0 100644 --- a/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java +++ b/python/src/com/jetbrains/python/sdk/PythonEnvUtil.java @@ -15,7 +15,6 @@ */ package com.jetbrains.python.sdk; -import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; @@ -23,7 +22,6 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.util.Collection; -import java.util.List; import java.util.Map; import java.util.Set; @@ -35,6 +33,7 @@ public class PythonEnvUtil { @SuppressWarnings("SpellCheckingInspection") public static final String PYTHONUNBUFFERED = "PYTHONUNBUFFERED"; @SuppressWarnings("SpellCheckingInspection") public static final String PYTHONIOENCODING = "PYTHONIOENCODING"; @SuppressWarnings("SpellCheckingInspection") public static final String IPYTHONENABLE = "IPYTHONENABLE"; + @SuppressWarnings("SpellCheckingInspection") public static final String PYTHONDONTWRITEBYTECODE = "PYTHONDONTWRITEBYTECODE"; private PythonEnvUtil() { } @@ -86,4 +85,10 @@ public class PythonEnvUtil { public static void addToPythonPath(@NotNull Map env, String value) { addPathToEnv(env, PYTHONPATH, value); } + + @NotNull + public static Map setPythonDontWriteBytecode(@NotNull Map env) { + env.put(PYTHONDONTWRITEBYTECODE, "1"); + return env; + } } diff --git a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java index 90d1921f920c..672137d4a150 100644 --- a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java +++ b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonGenerator.java @@ -29,6 +29,7 @@ import com.intellij.util.Consumer; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.sdk.InvalidSdkException; import com.jetbrains.python.sdk.PySdkUtil; +import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; import com.jetbrains.python.sdk.flavors.IronPythonSdkFlavor; import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; @@ -171,12 +172,9 @@ public class PySkeletonGenerator { protected ProcessOutput getProcessOutput(String homePath, String[] commandLine, Map extraEnv, int timeout) throws InvalidSdkException { - return PySdkUtil.getProcessOutput( - homePath, - commandLine, - extraEnv, - timeout - ); + final Map env = extraEnv != null ? new HashMap(extraEnv) : new HashMap(); + PythonEnvUtil.setPythonDontWriteBytecode(env); + return PySdkUtil.getProcessOutput(homePath, commandLine, env, timeout); } public void generateBuiltinSkeletons(@NotNull Sdk sdk) throws InvalidSdkException {