Search code examples
pythonpython-importpython-module

How can I import a module dynamically given the full path?


How do I load a Python module given its full path?

Note that the file can be anywhere in the filesystem where the user has access rights.


See also: How to import a module given its name as string?


Solution

  • Let's have MyClass in module.name module defined at /path/to/file.py. Below is how we import MyClass from this module

    For Python 3.5+ use (docs):

    import importlib.util
    import sys
    spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
    foo = importlib.util.module_from_spec(spec)
    sys.modules["module.name"] = foo
    spec.loader.exec_module(foo)
    foo.MyClass()
    

    For Python 3.3 and 3.4 use:

    from importlib.machinery import SourceFileLoader
    
    foo = SourceFileLoader("module.name", "/path/to/file.py").load_module()
    foo.MyClass()
    

    (Although this has been deprecated in Python 3.4.)

    For Python 2 use:

    import imp
    
    foo = imp.load_source('module.name', '/path/to/file.py')
    foo.MyClass()
    

    There are equivalent convenience functions for compiled Python files and DLLs.

    See also http://bugs.python.org/issue21436.