@@ -46,22 +46,29 @@ def create_vendor_txt_map() -> Dict[str, str]:
46
46
return dict (line .split ("==" , 1 ) for line in lines )
47
47
48
48
49
- def get_module_from_module_name (module_name : str ) -> ModuleType :
49
+ def get_module_from_module_name (module_name : str ) -> Optional [ ModuleType ] :
50
50
# Module name can be uppercase in vendor.txt for some reason...
51
51
module_name = module_name .lower ().replace ("-" , "_" )
52
52
# PATCH: setuptools is actually only pkg_resources.
53
53
if module_name == "setuptools" :
54
54
module_name = "pkg_resources"
55
55
56
- __import__ (f"pip._vendor.{ module_name } " , globals (), locals (), level = 0 )
57
- return getattr (pip ._vendor , module_name )
56
+ try :
57
+ __import__ (f"pip._vendor.{ module_name } " , globals (), locals (), level = 0 )
58
+ return getattr (pip ._vendor , module_name )
59
+ except ImportError :
60
+ # We allow 'truststore' to fail to import due
61
+ # to being unavailable on Python 3.9 and earlier.
62
+ if module_name == "truststore" and sys .version_info < (3 , 10 ):
63
+ return None
64
+ raise
58
65
59
66
60
67
def get_vendor_version_from_module (module_name : str ) -> Optional [str ]:
61
68
module = get_module_from_module_name (module_name )
62
69
version = getattr (module , "__version__" , None )
63
70
64
- if not version :
71
+ if module and not version :
65
72
# Try to find version in debundled module info.
66
73
assert module .__file__ is not None
67
74
env = get_environment ([os .path .dirname (module .__file__ )])
0 commit comments