Import

import module: include a module in the search path. Everything in the module can be accessed by the name module. During import, renaming is made possible by as clause. Without as clause, the module is accessed by the whole module name; otherwise it is accessed by the name provided with as clause. For example, in import os, the os module is used with the name os. In

import xml.etree.ElementTree as etree

the module is accessed with the name etree.

You can import a part of a module (functions, classes) by

from urllib.parse import urlencode

The function urllib.parse.urlencode can be accessed by urlencode.

__name__: if imported, it’s the module’s filename, without a directory path and extension. If it is run as a standalone program, it is '__main__'. We can enclose test code for the module with if __name__ == '__main__':.

__import__(name) takes a name of a module and returns an object of that module.

Modules

A module can be a single Python file (in this case, module name is the file name), or a directory with an __init__.py (in this case, module name is the directory name). When Python sees an __init__.py in a directory, a multi-file module is created, and files within the directory can reference other files by relative import.

from . import othermodule

The . and .. syntax on the import statement might look funny, but think of it as specifying a directory name. . means look in the current directory and ..B means look in the ../B directory. This syntax only works with the from form of import.

__init__.py can contain nothing, some functions, or all functions. Mainly it is used as entry point of the module. If a module is spitted into multiple files but you want it to be a single coherent module, import everything from different files in the __init__.py file.

To unify separate directories under a common namespace, you organize the code just like a normal Python package, but you omit __init__.py files in the directories where the components are going to join together. To illustrate, suppose you have two different directories of Python code like this:

foo-package/
    spam/
        blah.py
bar-package/
    spam/
        grok.py

In these directories, the name spam is being used as a common namespace. Observe that there is no init.py file in either directory. This feature is known as “namespace package”.

Python Package Index

Python 3 comes with a packaging framework: Distutils.

Structure of a Distutils package is like this:

module_name/
|
+--README.txt
+--setup.py
+--module_name/
   |
   +--__init__.py
   +--othercode.py

setup.py carries information about the package that Distutils uses. README.txt should be Windows-compatile and contains introduction about the package. Use the following command to check setup.py:

python3 setup.py check

Many things can be done (packaging, publishing, etc.) by running setup.py with different parameters.

To include additional files such as documentations, a manifest file called MANIFEST.in should be placed in the root directory.