In Python, what exactly does import * import? Does it import __init__.py found in the containing folder?
For example, is it necessary to declare from project.model import __init__, or is from project.model import * sufficient?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The “advantage” of
from xyz import *as opposed to other forms of import is that it imports everything (well, almost… [see (a) below] everything) from the designated module under the current module. This allows using the various objects (variables, classes, methods…) from the imported module without prefixing them with the module’s name. For exampleThis practice (of importing * into the current namespace) is however discouraged because it
Typically we therefore limit this import * practice to ad-hoc tests and the like. As pointed out by @Denilson-Sá-Maia, some libraries such as (e.g. pygame) have a sub-module where all the most commonly used constants and functions are defined and such sub-modules are effectively designed to be imported with
import *. Other than with these special sub-modules, it is otherwise preferable to …:explicitly import a few objects only
or import the module under its own namespace (or an alias thereof, in particular if this is a long name, and the program references its objects many times)
See the Python documentation on this topic
(a) Specifically, what gets imported with
from xyz import *?if xyz module defines an
__all__variable, it will import all the names defined in this sequence, otherwise it will import all names, except these which start with an underscore.Note Many libraries have sub-modules. For example the standard library
urllibincludes sub-modules likeurllib.request,urllib.errors,urllib.responseetc. A common point of confusion is thatfrom urllib import *would import all these sub-modules. That is NOT the case: one needs to explicitly imports these separately with, say,
from urllib.request import *etc. This incidentally is not specific toimport *, plainimportwill not import sub-modules either (but of course, the*which is often a shorthand for “everything” may mislead people in thinking that all sub-modules and everything else would be imported).