Python

Python

Made by DeepSource

Imported name is not used anywhere in the module PY-W2000

Anti-pattern
Major
Autofix

An object has been imported but is not used anywhere in the file. It should either be used or the import should be removed.

Bad practice

import os

def example():
    print("This snippet is not using the `os` import anywhere.")

Recommended

def example():
    print("This looks good now!")

But this import is used by other modules!

One major reason why this issue can cause confusion is when it's raised for imports that are meant to be exported, for use in other places.

For example, consider this file, mypackage/__init__.py:

from mypackage.foo import is_foo
from mypackage.bar import bar_function

This is a very common pattern to export common functionality from modules, to the top level of a package. But there is a major problem with this approach. Consider this file, mypackage/foo.py:

import os

def is_foo(item):
    return os.path.exists(item)

Since os is imported inside foo.py, you can actually do this:

>>> from mypackage.foo import os

Although weird, Python automatically exports all imports in a file. In practice however, it is ill-advised to rely on this behaviour.

If you want to explicitly export an imported item in a file, add it to the special variable named __all__:

from mypackage.foo import is_foo
from mypackage.bar import bar_function

__all__ = ['is_foo', 'bar_function']  # Notice that these are strings!

DeepSource won't raise an issue if the imported item is present in __all__.