Search code examples
pythonpython-2.7

How to determine if a module name is part of python standard library


I have a module name as a string (e.g. 'logging') that was given by querying the module attribute of an object.

How can I differentiate between modules that are part of my project and modules that are part of python standard library?

I know that I can check if this module was installed by pip using pip.get_installed_distributions(), but these are not related to the standard library

Note: I'm working on python 2.7 so solutions that are valid only in python 3.x are less relevant.

Unlike the answer here, I was looking for a solution that can be run in O(1) and will not require holding an array of results nor having to scan the directory for every query.

Thanks.


Solution

  • Quick 'n dirty solution, using the standard module imp:

    import imp
    import os.path
    import sys
    
    python_path = os.path.dirname(sys.executable)
    
    my_mod_name = 'logging'
    
    module_path = imp.find_module(my_mod_name)[1]
    if 'site-packages' in module_path or python_path in module_path or not imp.is_builtin(my_mod_name):
        print('module', my_mod_name, 'is not included in standard python library')