[Jython-checkins] jython: Ignore JYTHON_HOME during installation of pip (fixes #2345).
jeff.allen
jython-checkins at python.org
Sat Jul 20 17:16:29 EDT 2019
https://hg.python.org/jython/rev/6e1f58fc7445
changeset: 8254:6e1f58fc7445
user: Jeff Allen <ja.py at farowl.co.uk>
date: Sat Jul 20 19:13:11 2019 +0100
summary:
Ignore JYTHON_HOME during installation of pip (fixes #2345).
And stop warning people about it in README too.
files:
NEWS | 1 +
README.md | 4 -
README.txt | 16 +-
installer/src/java/org/python/util/install/ChildProcess.java | 54 ++++++---
installer/src/java/org/python/util/install/JarInstaller.java | 2 +
5 files changed, 46 insertions(+), 31 deletions(-)
diff --git a/NEWS b/NEWS
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@
Development tip
Bugs fixed
+ - [ 2345 ] Installing pip fails if JYTHON_HOME points to old installation
- [ 2774 ] test_ssl failures from weak certificate
- [ 2768 ] Allow bytearray + and += to accept buffer protocol objects
- [ 2742 ] JARs for bouncycastle out of date (upgrade to 1.16)
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -3,12 +3,8 @@
This is the development repository of Jython. Along with language and runtime compatibility with CPython 2.7, Jython 2.7 provides substantial support of the Python ecosystem. This includes built-in support of *pip/setuptools* (you can use with `bin/pip`) and a native launcher for Windows (`bin/jython.exe`), with the implication that you can finally install Jython scripts on Windows.
-**Note that if you have `JYTHON_HOME` set, you should unset it to avoid problems with the installer and pip/setuptools.**
-
Jim Baker presented a talk at PyCon 2015 about Jython 2.7, including demos of new features: https://www.youtube.com/watch?v=hLm3garVQFo
-The release was compiled on OSX using JDK 7 and requires a minimum of Java 7 to run.
-
Please try this release out and report any bugs at http://bugs.jython.org
You can test your installation of Jython (not the standalone jar) by running the regression tests, with the command:
diff --git a/README.txt b/README.txt
--- a/README.txt
+++ b/README.txt
@@ -6,11 +6,7 @@
language and runtime compatibility with CPython 2.7, Jython 2.7
provides substantial support of the Python ecosystem. This includes
built-in support of pip/setuptools (you can use with bin/pip) and a
-native launcher for Windows (bin/jython.exe), with the implication
-that you can finally install Jython scripts on Windows.
-
-**Note that if you have JYTHON_HOME set, you should unset it to avoid
-problems with the installer and pip/setuptools.**
+native launcher for Windows (bin/jython.exe).
Jim Baker presented a talk at PyCon 2015 about Jython 2.7, including
demos of new features: https://www.youtube.com/watch?v=hLm3garVQFo
@@ -31,8 +27,8 @@
See ACKNOWLEDGMENTS for details about Jython's copyright, license,
contributors, and mailing lists; and NEWS for detailed release notes,
-including bugs fixed, backwards breaking changes, and new features. We
-sincerely thank all who contribute to Jython, including - but not
-limited to - bug reports, patches, pull requests, documentation
-changes, support emails, and fantastic conversation on Freenode at
-#jython. Join us there for your questions and answers!
+including bugs fixed, backwards breaking changes, and new features.
+
+We sincerely thank all who contributed to this release of Jython,
+through bug reports, patches, pull requests, documentation changes,
+email and conversation in all media.
diff --git a/installer/src/java/org/python/util/install/ChildProcess.java b/installer/src/java/org/python/util/install/ChildProcess.java
--- a/installer/src/java/org/python/util/install/ChildProcess.java
+++ b/installer/src/java/org/python/util/install/ChildProcess.java
@@ -6,7 +6,9 @@
import java.io.InputStreamReader;
import java.nio.file.Path;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* Easy start of a child process.
@@ -86,6 +88,11 @@
private String _command[] = null;
/**
+ * Environment name-value pairs to add or remove (if null) at the start of {@link #run()}.
+ */
+ private Map<String, String> _environmentChanges = new HashMap<>();
+
+ /**
* The timeout (in milliseconds)
*/
private long _timeout = INFINITE_TIMEOUT;
@@ -170,6 +177,16 @@
public void setCWD(Path cwd) { _cwd = cwd; }
+ /**
+ * Set or delete an environment variable for the subsequently run command.
+ *
+ * @param key name of variable
+ * @param value new value or {@code null} to delete it.
+ */
+ public void putEnvironment(String key, String value) {
+ _environmentChanges.put(key, value);
+ }
+
public Path getCWD() { return _cwd; }
/**
@@ -263,14 +280,23 @@
try {
// determine start time
_startTime = System.currentTimeMillis();
- // start the process
+ // Create and configure the process specification
ProcessBuilder pb = new ProcessBuilder();
pb.command(getCommand());
if (getCWD() != null) {
pb.directory(getCWD().toFile());
}
+ // Adjust the environment variables from the default System.getenv()
+ for (Map.Entry<String, String> change : _environmentChanges.entrySet()) {
+ if (change.getValue() == null) {
+ pb.environment().remove(change.getKey());
+ } else {
+ pb.environment().put(change.getKey(), change.getValue());
+ }
+ }
+ // Run the process with redirected input and error streams.
+ debugCommand(pb);
_process = pb.start();
- debugCommand();
// handle stdout and stderr
OutputMonitor stdoutMonitor = new OutputMonitor(_process.getInputStream());
stdoutMonitor.start();
@@ -349,21 +375,15 @@
/**
* Lists the submitted command (if so indicated)
*/
- private void debugCommand() {
+ private void debugCommand(ProcessBuilder pb) {
if (isDebug()) {
- String[] command = getCommand();
- if (command != null) {
- System.out.print("[ChildProcess] command '");
- for (int i = 0; i < command.length; i++) {
- String commandPart = command[i];
- if (i == 0) {
- System.out.print(commandPart);
- } else {
- System.out.print(" " + commandPart);
- }
- }
- System.out.println("' is now running...");
- }
+ System.out.print("[ChildProcess] command = ");
+ System.out.println(pb.command());
+ System.out.print("[ChildProcess] environment = ");
+ System.out.println(pb.environment());
+ System.out.print("[ChildProcess] working directory = ");
+ System.out.println(pb.directory());
}
}
-}
\ No newline at end of file
+}
+
diff --git a/installer/src/java/org/python/util/install/JarInstaller.java b/installer/src/java/org/python/util/install/JarInstaller.java
--- a/installer/src/java/org/python/util/install/JarInstaller.java
+++ b/installer/src/java/org/python/util/install/JarInstaller.java
@@ -188,6 +188,8 @@
}
ChildProcess childProcess = new ChildProcess(command);
childProcess.setCWD(bindir);
+ // JYTHON_HOME will be wrong if set: see https://bugs.jython.org/issue2345
+ childProcess.putEnvironment("JYTHON_HOME", null);
errorCode = childProcess.run();
} catch (Throwable t) {
errorCode = 1;
--
Repository URL: https://hg.python.org/jython
More information about the Jython-checkins
mailing list