import statements

https://docs.python.org/3/reference/import.html

https://docs.python.org/3/library/importlib.html

INTRODUCTION

Python code in one module gains access to the code in another module by the process of importing it.

The 'import' statement combines two operations:
(a) searching for the named module [finders],
(b) binding the results of that search to a name in the local scope [loaders; module execution].

When a module is first imported, Python searches for the module and if found, it creates a module object, initializing it. If the named module cannot be found, a 'ImportError' (Py2) or 'ModuleNotFoundError' (Py3.6+) is raised.

The Python interpreter searches for modules in the following sequences:
(a) the current directory,
(b) directories in the shell variable PYTHONPATH.
(c) default locations (installation-dependent).

The module search path is stored in the system module 'sys' as the 'sys.path' variable.


import sys

print ( sys.modules.keys() )   # names of imported modules
print ( sys.path )           # the module search path

# Using 'import' statements.

import module1   # recommended
import module2, module3

print ( module1.name1 )
other_name = module1   # modules are objects
print ( other_name.name1 )
module1.name1 = new_value     # be careful!
module1.name2()      # a function call
print ( module1.__doc__ )   # docstring
help(module1)   # NAME, FILE, FUNCTIONS, DATA
dir(module1)              # namespace
module1.__dict__.keys()   # namespace

# Using 'from...import' statements.
# We can import specific names from a module into the current namespace.

from module1 import name1, name2

# Equivalent statements:
# import module1
# name1 = module1.name1
# name2 = module1.name2
# del module1

from module2 import *   # importing all names, possible problems

print ( "{} {}".format(name1, name2()) )

import module1 as module2

# Equivalent statements:
# import module1
# module2 = module1
# del module1

import numpy as np
import Tkinter as tk   # Py2
import tkinter as tk   # Py3
import pygame as pg

from module3 import name1 as name2

# The reload() function imports a previously imported module again.

#reload(module1)   # Py2

from importlib import reload   # Py3.4+
reload(module1)