| | import platform |
| | import sys |
| |
|
| | __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): |
| | del finder.find_distributions |
| |
|
| |
|
| | class NullFinder: |
| | """ |
| | A "Finder" (aka "MetaPathFinder") that never finds any modules, |
| | but may find distributions. |
| | """ |
| |
|
| | @staticmethod |
| | 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 |
| |
|