You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

__init__.py 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """
  2. pip._vendor is for vendoring dependencies of pip to prevent needing pip to
  3. depend on something external.
  4. Files inside of pip._vendor should be considered immutable and should only be
  5. updated to versions from upstream.
  6. """
  7. from __future__ import absolute_import
  8. import glob
  9. import os.path
  10. import sys
  11. # Downstream redistributors which have debundled our dependencies should also
  12. # patch this value to be true. This will trigger the additional patching
  13. # to cause things like "six" to be available as pip.
  14. DEBUNDLED = False
  15. # By default, look in this directory for a bunch of .whl files which we will
  16. # add to the beginning of sys.path before attempting to import anything. This
  17. # is done to support downstream re-distributors like Debian and Fedora who
  18. # wish to create their own Wheels for our dependencies to aid in debundling.
  19. WHEEL_DIR = os.path.abspath(os.path.dirname(__file__))
  20. # Define a small helper function to alias our vendored modules to the real ones
  21. # if the vendored ones do not exist. This idea of this was taken from
  22. # https://github.com/kennethreitz/requests/pull/2567.
  23. def vendored(modulename):
  24. vendored_name = "{0}.{1}".format(__name__, modulename)
  25. try:
  26. __import__(vendored_name, globals(), locals(), level=0)
  27. except ImportError:
  28. try:
  29. __import__(modulename, globals(), locals(), level=0)
  30. except ImportError:
  31. # We can just silently allow import failures to pass here. If we
  32. # got to this point it means that ``import pip._vendor.whatever``
  33. # failed and so did ``import whatever``. Since we're importing this
  34. # upfront in an attempt to alias imports, not erroring here will
  35. # just mean we get a regular import error whenever pip *actually*
  36. # tries to import one of these modules to use it, which actually
  37. # gives us a better error message than we would have otherwise
  38. # gotten.
  39. pass
  40. else:
  41. sys.modules[vendored_name] = sys.modules[modulename]
  42. base, head = vendored_name.rsplit(".", 1)
  43. setattr(sys.modules[base], head, sys.modules[modulename])
  44. # If we're operating in a debundled setup, then we want to go ahead and trigger
  45. # the aliasing of our vendored libraries as well as looking for wheels to add
  46. # to our sys.path. This will cause all of this code to be a no-op typically
  47. # however downstream redistributors can enable it in a consistent way across
  48. # all platforms.
  49. if DEBUNDLED:
  50. # Actually look inside of WHEEL_DIR to find .whl files and add them to the
  51. # front of our sys.path.
  52. sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path
  53. # Actually alias all of our vendored dependencies.
  54. vendored("cachecontrol")
  55. vendored("colorama")
  56. vendored("distlib")
  57. vendored("distro")
  58. vendored("html5lib")
  59. vendored("lockfile")
  60. vendored("six")
  61. vendored("six.moves")
  62. vendored("six.moves.urllib")
  63. vendored("six.moves.urllib.parse")
  64. vendored("packaging")
  65. vendored("packaging.version")
  66. vendored("packaging.specifiers")
  67. vendored("pep517")
  68. vendored("pkg_resources")
  69. vendored("progress")
  70. vendored("pytoml")
  71. vendored("retrying")
  72. vendored("requests")
  73. vendored("requests.packages")
  74. vendored("requests.packages.urllib3")
  75. vendored("requests.packages.urllib3._collections")
  76. vendored("requests.packages.urllib3.connection")
  77. vendored("requests.packages.urllib3.connectionpool")
  78. vendored("requests.packages.urllib3.contrib")
  79. vendored("requests.packages.urllib3.contrib.ntlmpool")
  80. vendored("requests.packages.urllib3.contrib.pyopenssl")
  81. vendored("requests.packages.urllib3.exceptions")
  82. vendored("requests.packages.urllib3.fields")
  83. vendored("requests.packages.urllib3.filepost")
  84. vendored("requests.packages.urllib3.packages")
  85. vendored("requests.packages.urllib3.packages.ordered_dict")
  86. vendored("requests.packages.urllib3.packages.six")
  87. vendored("requests.packages.urllib3.packages.ssl_match_hostname")
  88. vendored("requests.packages.urllib3.packages.ssl_match_hostname."
  89. "_implementation")
  90. vendored("requests.packages.urllib3.poolmanager")
  91. vendored("requests.packages.urllib3.request")
  92. vendored("requests.packages.urllib3.response")
  93. vendored("requests.packages.urllib3.util")
  94. vendored("requests.packages.urllib3.util.connection")
  95. vendored("requests.packages.urllib3.util.request")
  96. vendored("requests.packages.urllib3.util.response")
  97. vendored("requests.packages.urllib3.util.retry")
  98. vendored("requests.packages.urllib3.util.ssl_")
  99. vendored("requests.packages.urllib3.util.timeout")
  100. vendored("requests.packages.urllib3.util.url")
  101. vendored("urllib3")