Spaces:
Sleeping
Sleeping
| import sys | |
| import platform | |
| __all__ = ['install', 'NullFinder'] | |
| def install(cls): | |
| """ | |
| Class decorator for installation on sys.meta_path. | |
| Adds the backport DistributionFinder to sys.meta_path and | |
| attempts to disable the finder functionality of the stdlib | |
| DistributionFinder. | |
| """ | |
| sys.meta_path.append(cls()) | |
| disable_stdlib_finder() | |
| return cls | |
| def disable_stdlib_finder(): | |
| """ | |
| Give the backport primacy for discovering path-based distributions | |
| by monkey-patching the stdlib O_O. | |
| See #91 for more background for rationale on this sketchy | |
| behavior. | |
| """ | |
| def matches(finder): | |
| return getattr( | |
| finder, '__module__', None | |
| ) == '_frozen_importlib_external' and hasattr(finder, 'find_distributions') | |
| for finder in filter(matches, sys.meta_path): # pragma: nocover | |
| del finder.find_distributions | |
| class NullFinder: | |
| """ | |
| A "Finder" (aka "MetaPathFinder") that never finds any modules, | |
| but may find distributions. | |
| """ | |
| def find_spec(*args, **kwargs): | |
| return None | |
| def pypy_partial(val): | |
| """ | |
| Adjust for variable stacklevel on partial under PyPy. | |
| Workaround for #327. | |
| """ | |
| is_pypy = platform.python_implementation() == 'PyPy' | |
| return val + is_pypy | |