code: def setup_external_libs(libs):
      """
      Download external libraries from PyPI to SPARK_EC2_DIR/lib/ and prepend them to our PATH.
      """
      PYPI_URL_PREFIX = "https://pypi.python.org/packages/source"
      SPARK_EC2_LIB_DIR = os.path.join(SPARK_EC2_DIR, "lib")
  
      if not os.path.exists(SPARK_EC2_LIB_DIR):
          print(
              "Downloading external libraries that spark-ec2 needs from PyPI to {path}...".format(
                  path=SPARK_EC2_LIB_DIR
              )
          )
          print("This should be a one-time operation.")
          os.mkdir(SPARK_EC2_LIB_DIR)
  
      for lib in libs:
          versioned_lib_name = "{n}-{v}".format(
              n=lib["name"], v=lib["version"]
          )
          lib_dir = os.path.join(SPARK_EC2_LIB_DIR, versioned_lib_name)
  
          if not os.path.isdir(lib_dir):
              tgz_file_path = os.path.join(
                  SPARK_EC2_LIB_DIR, versioned_lib_name + ".tar.gz"
              )
              print(" - Downloading {lib}...".format(lib=lib["name"]))
              download_stream = urlopen(
                  "{prefix}/{first_letter}/{lib_name}/{lib_name}-{lib_version}.tar.gz".format(
                      prefix=PYPI_URL_PREFIX,
                      first_letter=lib["name"][:1],
                      lib_name=lib["name"],
                      lib_version=lib["version"],
                  )
              )
              with open(tgz_file_path, "wb") as tgz_file:
                  tgz_file.write(download_stream.read())
              with open(tgz_file_path, "rb") as tar:
                  if hashlib.md5(tar.read()).hexdigest() != lib["md5"]:
                      print(
                          "ERROR: Got wrong md5sum for {lib}.".format(
                              lib=lib["name"]
                          ),
                          file=stderr,
                      )
                      sys.exit(1)
              tar = tarfile.open(tgz_file_path)
              tar.extractall(path=SPARK_EC2_LIB_DIR)
              tar.close()
              os.remove(tgz_file_path)
              print(
                  " - Finished downloading {lib}.".format(
                      lib=lib["name"]
                  )
              )
          sys.path.insert(1, lib_dir)
  
imports: from __future__ import division, print_function, with_statement
  import codecs
  import hashlib
  import itertools
  import logging
  import os
  import os.path
  import pipes
  import random
  import shutil
  import string
  from stat import S_IRUSR
  import subprocess
  import sys
  import tarfile
  import tempfile
  import textwrap
  import time
  import warnings
  from datetime import datetime
  from optparse import OptionParser
  from sys import stderr
  import boto
  from boto.ec2.blockdevicemapping import BlockDeviceMapping, BlockDeviceType, EBSBlockDeviceType
  from boto import ec2
label_desc: Use image node_id 1 for calling a global function with example usage: setup_external_libs(libs) without return types