Spaces:
Runtime error
Runtime error
"""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 | |