You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
"""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
 |