Why is this an issue?

Importing every public name from a module using a wildcard (from mymodule import *) is a bad idea because:

Remember that imported names can change when you update your dependencies. A wildcard import that works today might be broken tomorrow.

Exceptions

No issue will be raised in __init__.py files. Wildcard imports are a common way of populating these modules.

No issue will be raised in modules doing only imports. Local modules are sometimes created as a proxy for third-party modules.

# file: mylibrary/pyplot.py
try:
    from guiqwt.pyplot import *  # Ok
except Exception:
    from matplotlib.pyplot import *  # Ok

Just keep in mind that wildcard imports might still create issues in these cases. It’s always better to import only what you need.

How to fix it

There are two ways to avoid a wildcard import:

Code examples

Noncompliant code example

from math import *  # Noncompliant
def exp(x):
    pass
print(exp(0))   # "None" will be printed

Compliant solution

import math
def exp(x):
    pass
print(math.exp(0))   # "1.0" will be printed

Or

from math import exp as m_exp
def exp(x):
    pass
print(m_exp(0))   # "1.0" will be printed

Resources