summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2014-02-14 23:14:54 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2014-02-14 23:14:54 (GMT)
commite2df5cfcbd37ca88a9826c2e1647ac09964beb33 (patch)
treebd04d3ef77a029572d935796954ad18097d23abc
parentb7bb675d3c034c3a46cc485352bbb035f74f47ff (diff)
downloadcpython-e2df5cfcbd37ca88a9826c2e1647ac09964beb33.zip
cpython-e2df5cfcbd37ca88a9826c2e1647ac09964beb33.tar.gz
cpython-e2df5cfcbd37ca88a9826c2e1647ac09964beb33.tar.bz2
Issue #19744: Handle missing SSL/TLS in ensurepip
- now also allows POSIX installation with SSL/TLS missing - a goal for pip 1.6 is to allow local use without SSL/TLS
-rw-r--r--Lib/ensurepip/__init__.py5
-rw-r--r--Lib/test/test_ensurepip.py8
-rw-r--r--Misc/NEWS4
3 files changed, 17 insertions, 0 deletions
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index e8d6abe..3f4e449 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -144,6 +144,11 @@ def _uninstall_helper(*, verbosity=0):
def _main(argv=None):
+ if ssl is None:
+ print("Ignoring ensurepip failure: {}".format(_MISSING_SSL_MESSAGE),
+ file=sys.stderr)
+ return
+
import argparse
parser = argparse.ArgumentParser(prog="python -m ensurepip")
parser.add_argument(
diff --git a/Lib/test/test_ensurepip.py b/Lib/test/test_ensurepip.py
index 6ddf8f6..8644a65 100644
--- a/Lib/test/test_ensurepip.py
+++ b/Lib/test/test_ensurepip.py
@@ -281,12 +281,20 @@ class TestMissingSSL(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_not_called()
self.assertIn("PIP_THIS_SHOULD_STAY", self.os_environ)
+ def test_main_exits_early_with_warning(self):
+ with test.support.captured_stderr() as stderr:
+ ensurepip_no_ssl._main(["--version"])
+ warning = stderr.getvalue().strip()
+ self.assertTrue(warning.endswith("requires SSL/TLS"), warning)
+ self.run_pip.assert_not_called()
+
# Basic testing of the main functions and their argument parsing
EXPECTED_VERSION_OUTPUT = "pip " + ensurepip._PIP_VERSION
class TestBootstrappingMainFunction(EnsurepipMixin, unittest.TestCase):
+ @requires_usable_pip
def test_bootstrap_version(self):
with test.support.captured_stdout() as stdout:
with self.assertRaises(SystemExit):
diff --git a/Misc/NEWS b/Misc/NEWS
index 84a8a2d..c23c35e 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,10 @@ Core and Builtins
Library
-------
+- Issue #19744: the ensurepip installation step now just prints a warning to
+ stderr rather than failing outright if SSL/TLS is unavailable. This allows
+ local installation of POSIX builds without SSL/TLS support.
+
- Issue #6815: os.path.expandvars() now supports non-ASCII environment
variables names and values.