Modules
Table of Contents
1 Nomenclature
- Module An object that serves as a unit of python code.
- Package Analogous to directories in a file system, they are special kinds of modules which contain submodules or subpackages. Any module with a
__path__
attribute is a package. - Namespace A place where a variable is stored. Namespaces are implemented as dictionaries. There are the local, global and built-in namespaces as well as nested namespaces in objects. Namespaces are used to implement scope.
2 The Import Statement
We can use the import
statement to use code from other modules in our module.
import numpy as np import matplotlib.pyplot # Note this also imports maplotlib x = np.linspace(0, 10, 1000) matplotlib.pyplot.plot(x, x**2) matplotlib.pyplot.show()
When a module is first imported, Python searches for the module and if found, it creates a module object. We can now access the module's global namespace from within our module using mymodule.var
.
Importing a module doesn't automatically import all of its submodules, but a package may choose to do this in its __init__.py
. For more info see this post.
2.1 From
We can use the from
statement to import subpackages, classes and functions into our script.
from numpy.random import standard_normal # Import function standard_normal from matplotlib import pyplot as plt # Import subpackage plt plt.scatter(standard_normal(1000), standard_normal(1000)) plt.show()
3 The __init__.py
File
Any directory with an __init__.py
file is recognised as a valid package.
When a regular package is imported, this __init__.py
file is implicitly executed, and the objects it defines are bound to names in the package’s namespace. The __init__.py
file can contain the same Python code that any other module can contain, and Python will add some additional attributes to the module when it is imported.
my_package/ __init__.py my_module.py my_other_module.py
In __init__.py
:
from .my_module import Foo from .my_other_module import foo
In my_script.py
:
import my_package # We can now use Foo and foo x = my_package.Foo() my_package.foo()
It's common however for an __init__.py
file to be left completely empty.