| """ |
| pip._vendor is for vendoring dependencies of pip to prevent needing pip to |
| depend on something external. |
| |
| Files inside of pip._vendor should be considered immutable and should only be |
| updated to versions from upstream. |
| """ |
| from __future__ import absolute_import |
| |
| import glob |
| import os.path |
| import sys |
| |
| # Downstream redistributors which have debundled our dependencies should also |
| # patch this value to be true. This will trigger the additional patching |
| # to cause things like "six" to be available as pip. |
| DEBUNDLED = False |
| |
| # By default, look in this directory for a bunch of .whl files which we will |
| # add to the beginning of sys.path before attempting to import anything. This |
| # is done to support downstream re-distributors like Debian and Fedora who |
| # wish to create their own Wheels for our dependencies to aid in debundling. |
| WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) |
| |
| |
| # Define a small helper function to alias our vendored modules to the real ones |
| # if the vendored ones do not exist. This idea of this was taken from |
| # https://github.com/kennethreitz/requests/pull/2567. |
| def vendored(modulename): |
| vendored_name = "{0}.{1}".format(__name__, modulename) |
| |
| try: |
| __import__(modulename, globals(), locals(), level=0) |
| except ImportError: |
| # This error used to be silenced in earlier variants of this file, to instead |
| # raise the error when pip actually tries to use the missing module. |
| # Based on inputs in #5354, this was changed to explicitly raise the error. |
| # Re-raising the exception without modifying it is an intentional choice. |
| raise |
| else: |
| sys.modules[vendored_name] = sys.modules[modulename] |
| base, head = vendored_name.rsplit(".", 1) |
| setattr(sys.modules[base], head, sys.modules[modulename]) |
| |
| |
| # If we're operating in a debundled setup, then we want to go ahead and trigger |
| # the aliasing of our vendored libraries as well as looking for wheels to add |
| # to our sys.path. This will cause all of this code to be a no-op typically |
| # however downstream redistributors can enable it in a consistent way across |
| # all platforms. |
| if DEBUNDLED: |
| # Actually look inside of WHEEL_DIR to find .whl files and add them to the |
| # front of our sys.path. |
| sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path |
| |
| # Actually alias all of our vendored dependencies. |
| vendored("appdirs") |
| vendored("cachecontrol") |
| vendored("certifi") |
| vendored("colorama") |
| vendored("contextlib2") |
| vendored("distlib") |
| vendored("distro") |
| vendored("html5lib") |
| vendored("six") |
| vendored("six.moves") |
| vendored("six.moves.urllib") |
| vendored("six.moves.urllib.parse") |
| vendored("packaging") |
| vendored("packaging.version") |
| vendored("packaging.specifiers") |
| vendored("pep517") |
| vendored("pkg_resources") |
| vendored("progress") |
| vendored("retrying") |
| vendored("requests") |
| vendored("requests.exceptions") |
| vendored("requests.packages") |
| vendored("requests.packages.urllib3") |
| vendored("requests.packages.urllib3._collections") |
| vendored("requests.packages.urllib3.connection") |
| vendored("requests.packages.urllib3.connectionpool") |
| vendored("requests.packages.urllib3.contrib") |
| vendored("requests.packages.urllib3.contrib.ntlmpool") |
| vendored("requests.packages.urllib3.contrib.pyopenssl") |
| vendored("requests.packages.urllib3.exceptions") |
| vendored("requests.packages.urllib3.fields") |
| vendored("requests.packages.urllib3.filepost") |
| vendored("requests.packages.urllib3.packages") |
| vendored("requests.packages.urllib3.packages.ordered_dict") |
| vendored("requests.packages.urllib3.packages.six") |
| vendored("requests.packages.urllib3.packages.ssl_match_hostname") |
| vendored("requests.packages.urllib3.packages.ssl_match_hostname." |
| "_implementation") |
| vendored("requests.packages.urllib3.poolmanager") |
| vendored("requests.packages.urllib3.request") |
| vendored("requests.packages.urllib3.response") |
| vendored("requests.packages.urllib3.util") |
| vendored("requests.packages.urllib3.util.connection") |
| vendored("requests.packages.urllib3.util.request") |
| vendored("requests.packages.urllib3.util.response") |
| vendored("requests.packages.urllib3.util.retry") |
| vendored("requests.packages.urllib3.util.ssl_") |
| vendored("requests.packages.urllib3.util.timeout") |
| vendored("requests.packages.urllib3.util.url") |
| vendored("resolvelib") |
| vendored("toml") |
| vendored("toml.encoder") |
| vendored("toml.decoder") |
| vendored("urllib3") |