From 3a794b340579600c3bbd050416a23b79b13295d8 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Wed, 27 May 2015 15:45:50 +0300 Subject: [PATCH 1/2] Revert "Don't generate compiled bytecode files for skeleton generator in the application directory (PY-15907)" This reverts commit d0dcd320d7e2a631360bd5284e98f3fe7029a238. --- python/helpers/generator3.py | 6 ------ 1 file changed, 6 deletions(-) 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 From 8d82e5d3c37f4eebc62198f97305ac6edffb6705 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Wed, 27 May 2015 18:15:07 +0300 Subject: [PATCH 2/2] Don't generate compiled bytecode files for skeletons, packaging and docstrings formatter (PY-15907) This fix disabled the generation of compiled bytecode files only for Python >= 2.6 in non read-only directories. Having new files inside the app directory breaks a Mac OS X security policy regarding application signing and it might result in the "incoming network connections" warning if the firewall is enabled and the default option about allowing signed software to accept incoming connections is enabled. --- .../documentation/PyStructuredDocstringFormatter.java | 7 ++++++- .../python/packaging/PyPackageManagerImpl.java | 6 ++++-- python/src/com/jetbrains/python/sdk/PythonEnvUtil.java | 9 +++++++-- .../python/sdk/skeletons/PySkeletonGenerator.java | 10 ++++------ 4 files changed, 21 insertions(+), 11 deletions(-) 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 {