C0415 import-outside-toplevel

Message

'Import outside toplevel (%s)'

Description

Used when an import statement is used anywhere other than the module toplevel. Move this import to the top of the file.

Example

In the following example, we import sys within the function fn.

def fn():
    import sys
    print(sys.version)
2:4: C0415: Import outside toplevel (sys)

This is not a good pratice. We should always have our import statements on the toplevel and at the top of the file.

import sys

def fn():
    print(sys.version)
No issues found.

Exceptions

There are some exceptions to that rule:

  • If you have an import cycle, moving import statements into functions or methods can help. You should try to fix the cyclic import by merging or splitting modules though.

  • If you need to control the time when a module is imported (because it uses some global state that needs to be set up before), it is also OK to use non-toplevel imports.

Running Pylint locally? In your CI?

There is a better way! Run PyCodeQual & get Pylint findings with history, diffs and statistics.

Click here to find out more.