.. _tut-modules:
************************
Modules module
****************** *************
If you quit from the Python interpreter and enter it again, the definitions you
have made (functions and variables) are lost. Therefore, if you want to write a
somewhat longer program, you are better off using a text editor to prepare the
input for the interpreter and running it with that file as input instead. This
is known as creating a *script*. As your program gets longer , you may want to
split it into several files for easier maintenance. You may also want to use a
handy function that you've written in several programs without copying its
definition into each program.
If you exit When the Python interpreter re-enters, all previously created definitions (variables and functions) will be lost. Therefore, if you want to write some programs that can be saved for a long time, it is best to use a text editor to write the program and input the saved file into the interpreter. We call this creating a *script*. Or the program becomes longer, and you may separate it into several files for easier maintenance. You may also want to use a commonly used function in several
programs, but don't want to copy its definition into each program.
To support this, Python has a way to put definitions in a file and use them in a
script or in an interactive instance of the interpreter. Such a file is called a
*module*; definitions from a module can be *imported* into other modules or into
the *main* module (the collection of variables that you have access to in a
script executed at the top level and in calculator mode).
To meet these needs, Python Provides a method to obtain definitions from a file for use in a script or an interactive instance of the
interpreter. Such a file is called a *module*; definitions in a module can be
imported*
into another module or into the main module (the set of variables that can be called when the script is executed is at the highest level and located
Calculator mode).
A module is a file containing Python definitions and statements. The file name
is the module name with the suffix :file:`.py` appended. Within a module, the
module's name (as a string) is available as the value of the global variable
``__name__``. For instance, use your favorite text editor to create a file
called :file:`fibo.py` in the current directory with the following contents:
module Is a file containing Python definitions and declarations. The file name is the module name plus the :file:`.py` suffix. The module name of the module
block (as a string) can be obtained from the global variable ``__name__``. For example, you can use your favorite file editor to create a file called:file:`fibo.py` in the current directory and enter the following content::
# Fibonacci numbers module
def fib(n ): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
def fib2(n ): # return Fibonacci series up to n
use using using using using using ’ ‐ ’ s ‐ ‐ ‐ ‐ result.append(b)
a, b = 0, 1
Return result
Now enter the Python interpreter and import this module with the following
command:
Now enter the Python interpreter and import this module with the following command::
>>> import fibo
This does not enter the names of the functions defined in ``fibo`` directly in
the current symbol table; it only enters the module name ``fibo`` there. Using
the module name you can access the functions:
Doing this does not directly import the functions in ``fibo`` into the current semantic table; it just imports the module name
``fibo``. You can access this function through the module name as follows::
>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>> ;> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'
If you intend to use a function often you can assign it to a local name:
If you intend to call the function directly, you can usually assign it a local name::
>>> fib = fibo .fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
.. _tut-moremodules:
More on Modules
================================
A module can contain executable statements as well as function definitions.
These statements are intended to initialize the module. They are executed only
the *first* time the module is imported somewhere. [#]_
Modules can contain execution statements just like function definitions. These statements are typically used to initialize modules. They are only executed once when the module is *first* imported. [#]_
Each module has its own private symbol table, which is used as the global symbol
table by all functions defined in the module. Thus, the author of a module can
use global variables in the module without worrying about accidental clashes
with a user's global variables. On the other hand, if you know what you are
doing you can touch a module's global variables with the same notation used to
refer to its functions, ``modname. itemname``.
corresponds to the global semantic table that defines all functions in the module, and each module has its own private semantic table. Therefore, module authors can use some global variables in the module without causing errors due to conflicts with the user's global variables. On the other hand, if you're sure you need this, you can access the global variables in the module just like you reference functions in the module, like this: ``modname.itemname``.
Modules can import other modules. It is customary but not required to place all
:keyword:`import` statements at the beginning of a module (or script, for that
matter). The imported module names are placed in the importing module's global
symbol table.
modules can import ( :keyword:`import` ) other modules. It is customary to place all import statements at the beginning of a module (or
script, etc.), but this is not required. The imported module name is entered in the global syntax of this module.
There is a variant of the :keyword:`import` statement that imports names from a
module directly into the importing module's symbol table. For example:
:keyword:`import` statement The imported module imports names into the semantic table of this module.
For example::
>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
This does not introduce the module name from which the imports are taken in the
local symbol table (so in the example, ``fibo`` is not defined). As shown above, ``fibo`` is not defined).
There is even a variant to import all names that a module defines:
There is even a way to import all the definitions in the module::
>>> from fibo import *
>>> ; fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
This imports all names except those beginning with an underscore (``_``).
This imports all names except those beginning with an underscore (``_``). ( ``_`` ) names.
Note that in general the practice of importing ``*`` from a module or package is
frowned upon, since it often causes poorly readable code. However, it is okay to
use it to save typing in interactive sessions .
It should be noted that in practice it is often discouraged to use ``*`` to import everything from a module or package, because
this will make the code difficult to read. However, this is convenient and saves effort in an interactive session.
.. note::
.. [#] For efficiency reasons, each module is only once imported per interpreter
session. Therefore, if you change your modules, you must restart the
interpreter -- or, if it's just one module you want to test interactively,
use :func:`reload`, e.g. ``reload(modulename)``.
.. [#] For performance reasons, each module in each interpreter Import only once per session. Therefore, if you modify your module, you need to restart the interpreter - or, if you just want to interactively test such a module, you can use :func:`reload` to reload, for example `` reload(modulename)`` .
.. _tut-modulesasscripts:
Executing modules as scripts Executing modules as scripts
----------------------------- --------------------------
When you run a Python module with :
Use the following method to execute a Python module::
python fibo.py < arguments>
the code in the module will be executed, just as if you imported it, but with
the ``__name__`` set to ``"__main__"``. That means that by adding this code at
the end of your module: The code in the
module will be executed as if it were imported, but now __name__ is set to
``"__main__"``. This is equivalent to if you add the following code after the module::
if __name__ == "__main__":
Y Import Sysm Fib (int (sys.argv [1])) You can make the file usable as a script as aSAN Importable Module, y runs if the module isexecuted as the "main" file: allows this file to be executed as a script just like when imported as a module. This code is only called when the module is executed as a "main" file:: $ python fibo.py 50 1 1 2 3 5 8 13 21 34If the module is imported, the code is not run:If the module is imported, this code will not be executed:: >>> import fibo >>>This is often used either to provide a convenient user interface to a module, orfor testing purposes (running the module as a script executes a test suite).This is usually used to provide a user interface for the module to facilitate testing (running the module as a script executes test requirements). .. _tut-searchpath:The Module Search Path module search path---------------------------------- ---------------.. index:: triple: module; search; pathWhen a module named :mod:`spam` is imported, the interpreter searches for a filenamed :file:`spam.py` in the current directory, and then in the list ofdirectories specified by the environment variable :envvar:`PYTHONPATH`. Thishas the same syntax as the shell variable :envvar: `PATH`, that is, a list ofdirectory names. When :envvar:`PYTHONPATH` is not set, or when the file is notfound there, the search continues in an installation-dependent default path; on
Unix, this is usually :file:`.:/usr/local/lib/python`.When importing a module called :mod:`spam`, the interpreter first searches for the module named in the current directory: file:`spam.py`, and then search in the list of directories represented by the environment variable:envvar:`PYTHONPATH`, and then the list of paths in the environment variable:envvar:`PATH`. If :envvar:`PYTHONPATH` is not set, or the file is not found, then search the installation directory, In Unix, this is usually :file:`.:/usr/local/lib/python` . Actually, modules are searched in the list of directories given by the variable``sys.path`` which is initialized from the directory containing the input script(or the current directory), :envvar:`PYTHONPATH` and the installation- dependentdefault. This allows Python programs that know what they're doing to modify orreplace the module search path. Note that because the directory containing thescript being run is on the search path, it is important that the script not havethe same name as a standard module, or Python will attempt to load the script asa module when that module is imported. This will generally be an error. Seesection :ref: `tut-standardmodules` for more information.In fact, the interpreter searches for modules in the path directory specified by the ``sys.path`` variable, which contains the input script (or the current directory) by default when it is initialized: envvar:`PYTHONPATH` and the installation directory. This allows Python programs to know how to modify or replace the module search directory. It should be noted that because these directories contain scripts that are run in the search path, these scripts should not have the same name as standard modules, otherwise Python will try to load these scripts as modules when importing the module. This usually results in an error. See :ref:`tut-standardmodules` for more information. "Compiled" Python files "Compiled" Python files---------------------------------- -------------------As an important speed-up of the start-up time for short programs that use a lotof standard modules, if a file called :file:`spam.pyc` exists in the directorywhere :file:`spam.py` is found, this is assumed to contain analready-"byte-compiled" version of the module :mod:`spam `. The modification timeof the version of :file:`spam.py` used to create :file:`spam.pyc` is recorded in:file:`spam.pyc`, and the :file:` .pyc` file is ignored if these don't match.For short programs that reference a large number of standard modules, there is an important way to improve startup speed. If it is in the directory where :file:`spam.py` is located A file named :file:`spam.pyc` exists, which is treated as a pre-"byte-compiled" (byte-compiled) version of the :mod:`spam` module. The modification time of this version of :file:`spam.py` used to create :file:`spam.pyc` is recorded in the :file:`spam.pyc` file. If the two do not match, :file :`.pyc` files are ignored. Normally, you don't need to do anything to create the :file:`spam.pyc` file.Whenever :file:`spam.py` is successfully compiled, an attempt is made to write
the compiled version to :file:`spam.pyc`. It is not an error if this attempt
fails; if for any reason the file is not written completely, the resulting
:file:`spam.pyc` file will be recognized as invalid and thus ignored later. The
contents of the :file:`spam.pyc` file are platform independent, so a Python
module directory can be shared by machines of different architectures.
Normally you don’t No work needs to be done to create the :file:`spam.pyc` file. Once :file:`spam.py` is successfully compiled, it will try to generate the corresponding version of :file:`spam.pyc`. If writing fails for any reason, the :file:`spam.pyc` file generated by
will be considered invalid and subsequently ignored. :file:`spam.pyc` The content of the file is platform independent, so the Python module directory can be shared between machines of different architectures.
Some tips for experts:
Some advanced tips:
* When the Python interpreter is invoked with the :option:`-O` flag, optimized
code is generated and stored in :file:`.pyo` files . The optimizer currently
doesn't help much; it only removes :keyword:`assert` statements. When
:option:`-O` is used, *all* :term:`bytecode` is optimized; `` .pyc`` files are
ignored and ``.py`` files are compiled to optimized bytecode.
When the Python interpreter is called with the :option:`-O` parameter, optimized code will be generated and saved in :file: `.pyo` file. The current optimizer doesn't help much; it just removes assertion ( :keyword:`assert` ) statements. Using the :option:`-O` parameter, *all* bytecodes ( :term:`bytecode` ) will be optimized; ``.pyc`` files are ignored, and ``.py` ` files are compiled into optimized code.
* Passing two :option:`-O` flags to the Python interpreter (:option:`-OO`) will
cause the bytecode compiler to perform optimizations that could in some rare
cases result in malfunctioning programs. Currently only ``__doc__`` strings are
removed from the bytecode, resulting in more compact :file:`.pyo` files. Since
some programs may rely on having these available, you should only use this
option if you know what you're doing.
Passing two :option:`-O` arguments ( :option:`-OO` ) to the Python interpreter will perform a fully
optimized binary compilation, which will occasionally generate errors program. The current optimizer only removes the ``__doc__`` string from the character
section code to generate a more compact :file:`.pyo` file. Because
some programs rely on the availability of these variables, you should only use this option when you are sure of it.
* A program doesn't run any faster when it is read from a :file:`.pyc` or
:file:`.pyo` file than when it is read from a :file:`.py` file ; the only thing
that's faster about :file:`.pyc` or :file:`.pyo` files is the speed with which
they are loaded.
from:file:`.pyc` file or :file Programs in :`.pyo` files will not run faster than those from
:file:`.py` files; :file:`.pyc` or :file:`.pyo` files are only loaded after
faster.
* When a script is run by giving its name on the command line, the bytecode for
the script is never written to a :file:`.pyc` or :file:`.pyo` file. Thus, the
Startup time of a script may be reduced by moving most of its code to a module
and having a small bootstrap script that imports that module. It is also
possible to name a :file:`.pyc` or :file :`.pyo` file directly on the command
line.
When running a script on the command line by its name, the binary code created for the script will not be written to :file:`.pyc` or :file :`.pyo` file. Of course, moving the main code of the script into a module
block, and then importing this module with a small startup script, can improve the startup speed of the script.
You can also specify a :file:`.pyc` or :file:`.pyo` file directly on the command line.
* It is possible to have a file called :file:`spam.pyc` (or :file:`spam.pyo`
when :option:`-O` is used) without a file :file:`spam .py` for the same module.
This can be used to distribute a library of Python code in a form that is
moderately hard to reverse engineer.
For the same module (here, routine:file:`spam .py` - Translator), you can only have :file:`spam.pyc` file (or :file:`spam.pyc` when using
:option:`-O` parameter) but not :file:`spam.py` file. This way it can be packaged and published
A Python code base that is difficult to reverse engineer.
.. index:: module: compileall
* The module :mod:`compileall` can create :file:`.pyc` files (or :file:`.pyo`
files when :option:`-O ` is used) for all modules in a directory.
:mod:`compileall` The module can create :file:`.pyc` files for all modules in the specified directory.
(or use :file:`.pyo` Parameters create:file:`.pyo` file).
.. _tut-standardmodules:
Standard Modules Standard modules
================================
.. index:: module: sys
Python comes with a library of standard modules, described in a separate
document, the Python Library Reference ("Library Reference" hereafter). Some
modules are built into the interpreter; these provide access to operations that
are not part of the core of the language but are nevertheless built in, either
for efficiency or to provide access to operating system primitives such as
system calls. The set of such modules is a configuration option which also
depends on the underlying platform For example, the :mod:`winreg` module is only
provided on Windows systems. One particular module deserves some attention:
:mod:`sys`, which is built into every Python interpreter. The variables
``sys.ps1`` and ``sys.ps2`` define the strings used as primary and secondary
prompts:
Python comes with a standard module library and is distributed with a standalone Documentation, titled Python Library Reference Manual
(henceforth referred to as the "Library Reference Manual"). There are some modules built into the interpreter. The access interfaces for these operations are not part of the language core, but are already built into the interpreter. This is not only to improve efficiency, but also to provide an interface for native access to the operating system such as system calls. This type of module collection is a configuration option that depends on the underlying platform. For example, the :mod:`winreg` module is only available on Windows systems
. There is one specific module worth noting: :mod:`sys`, this module is built into all
Python interpreters. The variables sys.ps1 and sys.ps2 define the primary prompt and secondary prompt strings::
>>> import sys
>>> sys.ps1
'>> > '
>>> sys.ps2
'... '
>>> sys.ps1 = 'C> '
C> print 'Yuck!'
C>
These two variables are only defined if the interpreter is in interactive mode.
These two variables are only meaningful in the interactive mode of the interpreter.
The variable ``sys.path`` is a list of strings that determines the interpreter's
search path for modules. It is initialized to a default path taken from the
environment variable :envvar:`PYTHONPATH`, or from a built-in default if
:envvar:`PYTHONPATH` is not set. You can modify it using standard list
operations:
The variable ``sys.path`` is a list of strings for the interpreter module search path. It is initialized by the environment variable :envvar:`PYTHONPATH`. If :envvar:`PYTHONPATH` is not set, it is initialized by the built-in default value. You can modify it using standard string operations::
>>> import sys
>>> sys.path.append('/ufs/guido/lib/python')
. . _tut-dir:
The :func:`dir` Function :func:`dir` function
========================== ============================
The built-in function :func:`dir` is used to find out which names a module
defines. It returns a sorted list of strings:
Built-in function: func:`dir` is used to search module definitions by module name. It returns a storage column of string type
Table::
>> ;> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> dir(sys)
[' __displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',
'__stdin__', '__stdout__', '_getframe', 'api_version', 'argv',
'builtin_module_names', 'byteorder' , 'callstats', 'copyright',
'displayhook', 'exc_clear', 'exc_info', 'exc_type', 'excepthook',
'exec_prefix', 'executable', 'exit', 'getdefaultencoding', ' getdlopenflags',
'getrecursionlimit', 'getrefcount', 'hexversion', 'maxint', 'maxunicode',
'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache',
'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setdlopenflags',
' setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout',
'version', 'version_info', 'warnoptions']
Without arguments, :func:`dir` lists the names you have defined currently:
When called without parameters, the :func:`dir` function returns the currently defined name::
>>> a = [1, 2, 3, 4, 5]
>> , 'a', 'fib', 'fibo', 'sys']
Note that it lists all types of names: variables, modules, functions, etc.
Note that it lists all types of names: variables , modules, functions, etc.
.. index:: module: __builtin__
:func:`dir` does not list the names of built-in functions and variables. If you
want a list of those, they are defined in the standard module
:mod:`__builtin__`:
:func:`dir` will not list built-in function and variable names. If you want to list these, they are defined in the standard module
:mod:`__builtin__` ::
>>> import __builtin__
>>> dir(__builtin__)
[' ArithmeticError', 'AssertionError', 'AttributeError', 'DeprecationWarning',
'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False',
'FloatingPointError', 'FutureWarning', 'IOError' , 'ImportError',
'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt',
'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented',
'NotImplementedError' , 'OSError', 'OverflowError',
'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError',
'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError',
'SyntaxWarning', 'SystemError' , 'SystemExit', 'TabError', 'True',
'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
'UserWarning', 'ValueError' , 'Warning', 'WindowsError',
'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__',
'__name__', 'abs', 'apply', 'basestring', ' bool', 'buffer',
'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile',
'complex', 'copyright', 'credits', 'delattr' , 'dict', 'dir', 'divmod',
'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float',
'frozenset', ' getattr', 'globals', 'hasattr', 'hash', 'help', 'hex',
'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', ' iter',
'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'memoryview',
'min', 'object', 'oct' , 'open', 'ord', 'pow', 'property', 'quit', 'range',
'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round' , 'set',
'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super',
'tuple', 'type', 'unichr', ' unicode', 'vars', 'xrange', 'zip']
.. _tut-packages:
Packages package
==============
Packages are a way of structuring Python's module namespace by using "dotted
module names". For example, the module name :mod:`A.B` designates a submodule
named ``B`` in a package named ``A``. Just like the use of modules saves the
authors of different modules from having to worry about each other's global
variable names, the use of dotted module names saves the authors of multi-module
packages like NumPy or the Python Imaging Library from having to worry about
each other's module names.
Packages usually use a structured module namespace using "dot module names" . For example, a module named
:mod:`A.B` represents a submodule named ``A`` in a package named ``B``. Just as using
modules to store different module architectures can avoid conflicts between global variables, using dot module names
to store different library architectures like NumPy or Python Imaging Library can avoid conflicts between modules
naming conflict.
Suppose you want to design a collection of modules (a "package") for the uniform
handling of sound files and sound data. There are many different sound file
formats (usually recognized by their extension, for example: : file:`.wav`,
:file:`.aiff`, :file:`.au`), so you may need to create and maintain a growing
collection of modules for the conversion between the various file formats.
There are also many different operations you might want to perform on sound data
(such as mixing, adding echo, applying an equalizer function, creating an
artificial stereo effect), so in addition you will be writing a never- ending
stream of modules to perform these operations. Here's a possible structure for
your package (expressed in terms of a hierarchical filesystem):
Suppose you now want to design a module set (a "package") for unified processing Sound files and sound data.
Several different sound formats exist (often identified by their extensions, for example: :file:`.wav`
, :file:`.aiff`, :file:`.au`), so, In order to convert between different types of file formats, you need to maintain a growing collection of packages. You may also want to do a lot of different
operations on the sound data (e.g. mix, add echo, apply a balance function, create an artificial effect), so you will
add an infinite stream module to perform these operations. Your bag may be like this (grouping through a graded text
system) ::
Sound/ Top-Level Package
__init__.py Initialize the sound package
formats/ subpackage for fire format converteds
_ __Init __. Py Wavread.py Wavwrite.py Aiffread.py Aiffwrite.py auread.py auwrite.py ... Effects/ subpackage for publicTs __init___________init________ .py Echo.py . filters/ Subpackage for filters __init__.py equalizer.py vocoder.pykaraoke.py
...When importing the package, Python searches through the directories on``sys.path`` looking for the package subdirectory.When importing the module, Python searches through the directories in ``sys.path`` List to search the subdirectory where the package is stored. The :file:`__init__.py` files are required to make Python treat the directories
as containing packages; this is done to prevent directories with a common name,
such as ``string``, from unintentionally hiding valid modules that occur later
on the module search path. In the simplest case, :file: `__init__.py` can just be
an empty file, but it can also execute initialization code for the package or
set the ``__all__`` variable, described later.
must have a :file:`__init__ The existence of the .py` file can make Python regard the directory as a package; this is to prevent some directories from using common names like ``string`` and inadvertently including them in the subsequent module search paths. The correct modules are covered. In the simplest case,
:file:`__init__.py` can be just an empty file, but it may also contain the initialization code of the package, or set the ``__all__`` variable, which will be introduced later.
Users of the package can import individual modules from the package, for
example:
Users of the package can import legal modules from the package, for example::
import sound.effects.echo
This loads the submodule: mod:`sound.effects.echo`. It must be referenced with
its full name. :
This will import the :mod:`Sound.Effects.echo` submodule. It must be referenced by its complete name. ::
Sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
An alternative way of importing the submodule is:
There is an alternative way to import the package::
from sound.effects import echo
This also loads the submodule :mod:`echo`, and makes it available without its
package prefix, so it can be used as follows:
` submodule, and makes it available without package prefix, so it can be called as follows::
echo.echofilter(input, output, delay=0.7, atten=4)
Yet another variation is to import the desired function or variable directly:
There is another variation to import the desired function or variable directly::
from sound.effects.echo import echofilter
Again, this loads the submodule :mod: `echo`, but this makes its function
:func:`echofilter` directly available:
This loads the :mod:`echo` submodule again, but this makes its function
:func: `echofilter` function::
echofilter(input, output, delay=0.7, atten=4)
Note that when using ``from package import item``, the item can be either a
submodule (or subpackage) of the package, or some other name defined in the
package, like a function, class or variable. The ``import`` statement first
tests whether the item is defined in the package; if not, it assumes it is a
module and attempts to load it. If it fails to find it, an :exc:`ImportError`
exception is raised.
It should be noted that when using the ``from package import item`` method to import a package, This item can be either a submodule (or a subpackage) in the package, or other names defined in the package, such as functions, classes, or variables. The import statement first checks to see if the subkey is present in the package. If not, it assumes this is a module and attempts to load it. If it is not found, an ImportError exception is raised.
Contrarily, when using syntax like ``import item.subitem.subsubitem``, each item
except for the last must be a package; the last item can be a module or a
package but can't be a class or function or variable defined in the previous
item.
In contrast, when using syntax like ``import item.subitem.subsubitem``, these subitems must be packages and the last subitem can be Package or module, but not a class, function or variable defined in the previous sub-item.
.. _tut-pkg-import-star:
Importing /* From a Package
---------------------------
.. index:: single: __all__
Now what happens when the user writes ``from sound.effects import *``? Ideally,
one would hope that this somehow goes out to the filesystem, finds which
submodules are present in the package, and imports them all. This could take a
long time and importing sub-modules might have unwanted side-effects that should
only happen when the sub-module is explicitly imported. What happens when you write ``from sound.Effects import *``? Ideally, you would want to find all the submodules in the package in the file system and then import them. This can take a
long time and have unexpected edge effects, exporting packages that you wish you could only import explicitly.
The only solution is for the package author to provide an explicit index of the
package. The :keyword:`import` statement uses the following convention: if a package's
:file:`__init__.py` code defines a list named ``__all__``, it is taken to be the
list of module names that should be imported when ``from package import *`` is
encountered. It is up to the package author to keep this list up-to-date when a
new version of the package is released. Package authors may also decide not to
support it, if they don't see a use for importing /* from their package. For
example, the file :file:`sounds/effects/__init__.py` could contain the following
code:
The only solution for package authors is to give Provide an explicit package index.
:keyword:`import` statements are converted according to the following conditions: when executing ``from package import
*``, if the :file:`__init__.py` code in the package defines a file named ``__all__` The list of `
will be imported according to the module name given in the list. The author can update this list at will when a new version of the package is released. If the package author doesn't want to import all the modules in their package when import *, then they may decide not to support it (import /*). For example,
:file:`Sounds/Effects/__init__.py` This file may include the following code::
__all__ = ["echo", "surround", "reverse"]
This would mean that ``from sound.effects import *`` would import the three
named submodules of the :mod:`sound` package.
This means ``from Sound.Effects import *`` would import the :mod:`sound` package. Import the above three named submodules.
If ``__all__`` is not defined, the statement ``from sound.effects import *``
does *not* import all submodules from the package :mod:`sound.effects` into the
current namespace ; it only ensures that the package :mod:`sound.effects` has
been imported (possibly running any initialization code in :file:`__init__.py`)
and then imports whatever names are defined in the package. This includes any
names defined (and submodules explicitly loaded) by :file:`__init__.py`. It
also includes any submodules of the package that were explicitly loaded by
previous :keyword:`import` statements. Consider this code:
If ``__all__`` is not defined, the ``from Sound.Effects import *`` statement will not import all submodules from the
:mod:`sound.effects` package. No matter how many names are defined in the package, the only thing that can be determined is that the :mod:`sound.effects` package is imported (the initialization code in __init__.py may be run) and all the naming conventions defined in the package Then import. This imports every named (and explicitly imported submodule) from ``__init__.py``
. It also includes submodules that are explicitly imported from the package by the aforementioned
:keyword:`import` statement. Consider the following code::
import sound.effects.echo
import sound.effects.surround
from sound. effects import *
In this example, the :mod:`echo` and :mod:`surround` modules are imported in the
current namespace because they are defined in the :mod:`sound.effects` package
when the ``from...import`` statement is executed. (This also works when
``__all__`` is defined.)
In this example, :mod:`echo` and :mod:`surround` Modules are imported into the current namespace because they are already defined in the
:mod:`sound.effects` package (which defines __all__` when executing the ``from...import`` statement) ` will work the same way).
Although certain modules are designed to export only names that follow certain
patterns when you use ``import *``, it is still considered bad practice in
production code. When import *``, it only exports names that match a certain pattern. Still, it is not recommended to use this writing method in production code.
Remember, there is nothing wrong with using ``from Package import
specific_submodule``! In fact, this is the recommended notation unless the
importing module needs to use submodules with the same name from different
packages.
Remember, there is no error in ``from Package import specific_submodule``! In fact, except
non-imported modules need to use submodules with the same name in other packages, otherwise this is the recommended way of writing.
Intra-package References Package references
----------------------------------------
The submodules often need to refer to each other. For example, the
:mod:`surround` module might use the :mod:`echo` module. In fact, such
references are so common that the :keyword:` import` statement first looks in the
containing package before looking in the standard module search path. Thus, the
:mod:`surround` module can simply use ``import echo`` or ``from echo import
echofilter ``. If the imported module is not found in the current package (the
package of which the current module is a submodule), the :keyword:`import`
statement looks for a top-level module with the given name .
Submodules often need to reference each other. For example, the :mod:`surround` module might reference
:mod:`echo` module. In fact, such references are so common that the :keyword:`import`
statement searches inside the package first, followed by the standard module search path. Therefore, the :mod:`surround` module can simply call ``import echo`` or ``from echo import echofilter``
. If the module to be imported is not found in the current package, the :keyword:`import` statement will look for a top-level module based on the specified name.
When packages are structured into subpackages (as with the :mod:`sound` package
in the example), you can use absolute imports to refer to submodules of siblings
packages. For example, if the module :mod: `sound.filters.vocoder` needs to use
the :mod:`echo` module in the :mod:`sound.effects` package, it can use ``from
sound.effects import echo``.
If a sub-package structure is used in the package (like the :mod:`sound` package in the example), submodules can be imported from adjacent packages by absolute position
. For example, if the :mod:`sound.filters.vocoder` package requires
use the :mod:`echo` module from the :mod:`sound.effects` package, it can
``from Sound.Effects import echo` `.
Starting with Python 2.5, in addition to the implicit relative imports described
above, you can write explicit relative imports with the ``from module import
name`` form of import statement. These explicit relative imports use leading
dots to indicate the current and parent packages involved in the relative
import. From the :mod:`surround` module for example, you might use:
Starting with Python 2.5, the aforementioned internal explicit relative import Improved, you can write explicit relative imports using the
form ``from module import name``. Those explicit imports are marked with dots to indicate the relationship between the current and parent packages. Taking the :mod:`surround` module as an example, you can use it like this::
from . import echo
from .. import formats
from ..filters import equalizer
Note that both explicit and implicit relative imports are based on the name of
the current module. Since the name of the main module is always ``"__main__"``,
modules intended for use as the main module of a Python application should
always use absolute imports .
It should be noted that explicit or implicit relative positional imports are based on the naming of the current module. Because the name of the main module is always ``"__main__"``, the main module of a Python application should always be imported absolutely.
Packages in Multiple Directories
---------------------------------------- ------------------
Packages support one more special attribute, :attr:`__path__`. This is
initialized to be a list containing the name of the directory holding the
package's :file:`__init__.py` before the code in that file is executed. This
variable can be modified; doing so affects future searches for modules and
subpackages contained in the package. For special attributes, :attr:`__path__` . This variable initializes a list of directory names before the package's
:file:`__init__.py`
file code is executed. This variable can be modified, and it acts on the search function of sub-packages and modules in the
package.
While this feature is not often needed, it can be used to extend the set of
modules found in a package.
This feature can be used to extend the set of modules found in a package, but it is not commonly used.
.. rubric:: Footnotes
.. [#] In fact function definitions are also 'statements' that are 'executed'; the
execution of a module-level function enters the function name in the module's
global symbol table.
.. [#] In fact, a function definition is both a "declaration" and an "executable body"; the executable body is imported by the name of the function in the module global semantic table.
The above is the basic tutorial of Python 2.7: the content of the module. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!