Switch get-pip.py to use the generated .whl

This commit is contained in:
Donald Stufft 2015-01-28 15:54:08 -05:00
parent ee6b739fb6
commit 376bd9b19f
1 changed files with 17 additions and 28 deletions

View File

@ -1,8 +1,11 @@
import base64
import hashlib
import io
import json
import os
import shutil
import tempfile
import urllib.request
import zipfile
import invoke
@ -208,35 +211,21 @@ if __name__ == "__main__":
main()
""".lstrip()
# Get all of the files we want to add to the zip file
print("[generate.installer] Collect all the files that should be zipped")
all_files = []
for root, dirs, files in os.walk(os.path.join(paths.PROJECT_ROOT, "pip")):
for pyfile in files:
if os.path.splitext(pyfile)[1] in {".py", ".pem", ".cfg", ".exe"}:
path = os.path.join(root, pyfile)
all_files.append(
"/".join(
path.split("/")[len(paths.PROJECT_ROOT.split("/")):]
)
)
# Determine what the latest version of pip on PyPI is.
resp = urllib.request.urlopen("https://pypi.python.org/pypi/pip/json")
data = json.loads(resp.read().decode("utf8"))
version = data["info"]["version"]
file_urls = [
(x["url"], x["md5_digest"])
for x in data["releases"][version]
if x["url"].endswith(".whl")
]
assert len(file_urls) == 1
url, expected_hash = file_urls[0]
tmpdir = tempfile.mkdtemp()
try:
# Get a temporary path to use as staging for the pip zip
zpth = os.path.join(tmpdir, "pip.zip")
# Write the pip files to the zip archive
print("[generate.installer] Generate the bundled zip of pip")
with zipfile.ZipFile(zpth, "w", compression=zipfile.ZIP_DEFLATED) as z:
for filename in all_files:
z.write(os.path.join(paths.PROJECT_ROOT, filename), filename)
# Get the binary data that compromises our zip file
with open(zpth, "rb") as fp:
data = fp.read()
finally:
shutil.rmtree(tmpdir, ignore_errors=True)
# Fetch the file itself.
data = urllib.request.urlopen(url).read()
assert hashlib.md5(data).hexdigest() == expected_hash
# Write out the wrapper script that will take the place of the zip script
# The reason we need to do this instead of just directly executing the