From 0373c3d9f766a5b0430839f2c04143918d6a020e Mon Sep 17 00:00:00 2001 From: Bernie Hackett Date: Mon, 6 Mar 2017 15:49:34 -0800 Subject: [PATCH] Update ez_setup.py to latest --- ez_setup.py | 50 +++++++++++++++++++------------------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/ez_setup.py b/ez_setup.py index 4ef3ee017..800c31ef6 100644 --- a/ez_setup.py +++ b/ez_setup.py @@ -6,6 +6,8 @@ Setuptools bootstrapping installer. Maintained at https://github.com/pypa/setuptools/tree/bootstrap. Run this script to install or upgrade setuptools. + +This method is DEPRECATED. Check https://github.com/pypa/setuptools/issues/581 for more details. """ import os @@ -18,27 +20,28 @@ import subprocess import platform import textwrap import contextlib -import json -import codecs from distutils import log try: from urllib.request import urlopen - from urllib.parse import urljoin except ImportError: from urllib2 import urlopen - from urlparse import urljoin try: from site import USER_SITE except ImportError: USER_SITE = None -LATEST = object() -DEFAULT_VERSION = LATEST +# 33.1.1 is the last version that supports setuptools self upgrade/installation. +DEFAULT_VERSION = "33.1.1" DEFAULT_URL = "https://pypi.io/packages/source/s/setuptools/" DEFAULT_SAVE_DIR = os.curdir +DEFAULT_DEPRECATION_MESSAGE = "ez_setup.py is deprecated and when using it setuptools will be pinned to {0} since it's the last version that supports setuptools self upgrade/installation, check https://github.com/pypa/setuptools/issues/581 for more info; use pip to install setuptools" + +MEANINGFUL_INVALID_ZIP_ERR_MSG = 'Maybe {0} is corrupted, delete it and try again.' + +log.warn(DEFAULT_DEPRECATION_MESSAGE.format(DEFAULT_VERSION)) def _python_cmd(*args): @@ -104,8 +107,16 @@ def archive_context(filename): old_wd = os.getcwd() try: os.chdir(tmpdir) - with ContextualZipFile(filename) as archive: - archive.extractall() + try: + with ContextualZipFile(filename) as archive: + archive.extractall() + except zipfile.BadZipfile as err: + if not err.args: + err.args = ('', ) + err.args = err.args + ( + MEANINGFUL_INVALID_ZIP_ERR_MSG.format(filename), + ) + raise # going in the directory subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) @@ -147,7 +158,6 @@ def use_setuptools( Return None. Raise SystemExit if the requested version or later cannot be installed. """ - version = _resolve_version(version) to_dir = os.path.abspath(to_dir) # prior to importing, capture the module state for @@ -334,7 +344,6 @@ def download_setuptools( ``downloader_factory`` should be a function taking no arguments and returning a function for downloading a URL to a target. """ - version = _resolve_version(version) # making sure we use the absolute path to_dir = os.path.abspath(to_dir) zip_name = "setuptools-%s.zip" % version @@ -347,27 +356,6 @@ def download_setuptools( return os.path.realpath(saveto) -def _resolve_version(version): - """ - Resolve LATEST version - """ - if version is not LATEST: - return version - - meta_url = urljoin(DEFAULT_URL, '/pypi/setuptools/json') - resp = urlopen(meta_url) - with contextlib.closing(resp): - try: - charset = resp.info().get_content_charset() - except Exception: - # Python 2 compat; assume UTF-8 - charset = 'UTF-8' - reader = codecs.getreader(charset) - doc = json.load(reader(resp)) - - return str(doc['info']['version']) - - def _build_install_args(options): """ Build the arguments to 'python setup.py install' on the setuptools package.