Summary of several ways to import modules in Python


Many useful functions are encapsulated inside the module, and sometimes need to be imported when invoked outside the module. The common ways are as follows:

1 . import

>>> import sys
>>> sys.path
['', 'C:\\Python34\\Lib\\idlelib', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']

Most commonly, the name of the module to be imported is written down later.

2 .from .. import ..

Similar to import, but more specific to import methods or variables, such as:

>>> from sys import path
>>> path
['', 'C:\\Python34\\Lib\\idlelib', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']

However, it can cause namespace pollution and import is recommended.

3. Import the module with a name string

We might want to import the module like this:

 >>> import "sys"
SyntaxError: invalid syntax

python import accepts a variable instead of a string. How about assigning “sys” to a variable?

>>> x="sys"
>>> import x
Traceback (most recent call last):
 File "<pyshell#4>", line 1, in <module>
  import x
ImportError: No module named 'x'

This does not work either; this means importing a module named x instead of the sys module represented by x.

We need to use the exec function:

>>> x="sys"
>>> exec("import "+ x)
>>> sys.path
['', 'C:\\Python34\\Lib\\idlelib', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']

Build the import statement into a string and pass it to the exec function for execution.

The disadvantage of exec is that it compiles every time it executes, and running it multiple times can affect performance.

A better way is to use the function s 45en__.

>>> x="sys"
>>> sys = __import__(x)
>>> sys.path
['', 'C:\\Python34\\Lib\\idlelib', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']

This approach requires a variable to hold the module object for subsequent calls.