123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """Utility functions for finding modules
- Utility functions for finding modules on sys.path.
- """
- #-----------------------------------------------------------------------------
- # Copyright (c) 2011, the IPython Development Team.
- #
- # Distributed under the terms of the Modified BSD License.
- #
- # The full license is in the file COPYING.txt, distributed with this software.
- #-----------------------------------------------------------------------------
- #-----------------------------------------------------------------------------
- # Imports
- #-----------------------------------------------------------------------------
- # Stdlib imports
- import importlib
- import sys
- # Third-party imports
- # Our own imports
- #-----------------------------------------------------------------------------
- # Globals and constants
- #-----------------------------------------------------------------------------
- #-----------------------------------------------------------------------------
- # Local utilities
- #-----------------------------------------------------------------------------
- #-----------------------------------------------------------------------------
- # Classes and functions
- #-----------------------------------------------------------------------------
- def find_mod(module_name):
- """
- Find module `module_name` on sys.path, and return the path to module `module_name`.
- * If `module_name` refers to a module directory, then return path to `__init__` file.
- * If `module_name` is a directory without an __init__file, return None.
- * If module is missing or does not have a `.py` or `.pyw` extension, return None.
- * Note that we are not interested in running bytecode.
- * Otherwise, return the fill path of the module.
- Parameters
- ----------
- module_name : str
- Returns
- -------
- module_path : str
- Path to module `module_name`, its __init__.py, or None,
- depending on above conditions.
- """
- spec = importlib.util.find_spec(module_name)
- module_path = spec.origin
- if module_path is None:
- if spec.loader in sys.meta_path:
- return spec.loader
- return None
- else:
- split_path = module_path.split(".")
- if split_path[-1] in ["py", "pyw"]:
- return module_path
- else:
- return None
|