| 
									
										
										
										
											2005-01-19 05:42:50 +00:00
										 |  |  | \section{\module{zipimport} --- | 
					
						
							|  |  |  |          Import modules from Zip archives} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \declaremodule{standard}{zipimport} | 
					
						
							|  |  |  | \modulesynopsis{support for importing Python modules from ZIP archives.} | 
					
						
							|  |  |  | \moduleauthor{Just van Rossum}{just@letterror.com} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \versionadded{2.3} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This module adds the ability to import Python modules (\file{*.py}, | 
					
						
							|  |  |  | \file{*.py[co]}) and packages from ZIP-format archives. It is usually | 
					
						
							|  |  |  | not needed to use the \module{zipimport} module explicitly; it is | 
					
						
							|  |  |  | automatically used by the builtin \keyword{import} mechanism for | 
					
						
							|  |  |  | \code{sys.path} items that are paths to ZIP archives. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Typically, \code{sys.path} is a list of directory names as strings.  This | 
					
						
							|  |  |  | module also allows an item of \code{sys.path} to be a string naming a ZIP | 
					
						
							|  |  |  | file archive. The ZIP archive can contain a subdirectory structure to | 
					
						
							|  |  |  | support package imports, and a path within the archive can be specified to | 
					
						
							|  |  |  | only import from a subdirectory.  For example, the path | 
					
						
							|  |  |  | \file{/tmp/example.zip/lib/} would only import from the | 
					
						
							|  |  |  | \file{lib/} subdirectory within the archive. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Any files may be present in the ZIP archive, but only files \file{.py} and | 
					
						
							|  |  |  | \file{.py[co]} are available for import.  ZIP import of dynamic modules | 
					
						
							|  |  |  | (\file{.pyd}, \file{.so}) is disallowed. Note that if an archive only | 
					
						
							|  |  |  | contains \file{.py} files, Python will not attempt to modify the archive | 
					
						
							|  |  |  | by adding the corresponding \file{.pyc} or \file{.pyo} file, meaning that | 
					
						
							|  |  |  | if a ZIP archive doesn't contain \file{.pyc} files, importing may be rather | 
					
						
							|  |  |  | slow. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Using the built-in \function{reload()} function will | 
					
						
							|  |  |  | fail if called on a module loaded from a ZIP archive; it is unlikely that | 
					
						
							|  |  |  | \function{reload()} would be needed, since this would imply that the ZIP | 
					
						
							|  |  |  | has been altered during runtime. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The available attributes of this module are: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-15 14:59:55 +00:00
										 |  |  | \begin{excdesc}{ZipImportError} | 
					
						
							| 
									
										
										
										
											2005-01-19 05:42:50 +00:00
										 |  |  |   Exception raised by zipimporter objects. It's a subclass of | 
					
						
							|  |  |  |   \exception{ImportError}, so it can be caught as \exception{ImportError}, | 
					
						
							|  |  |  |   too. | 
					
						
							|  |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{classdesc*}{zipimporter} | 
					
						
							|  |  |  |   The class for importing ZIP files.  See | 
					
						
							|  |  |  |   ``\citetitle{zipimporter Objects}'' (section \ref{zipimporter-objects}) | 
					
						
							|  |  |  |   for constructor details. | 
					
						
							|  |  |  | \end{classdesc*} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{seealso} | 
					
						
							|  |  |  |   \seetitle[http://www.pkware.com/appnote.html]{PKZIP Application | 
					
						
							|  |  |  |             Note}{Documentation on the ZIP file format by Phil | 
					
						
							|  |  |  |             Katz, the creator of the format and algorithms used.} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   \seepep{0273}{Import Modules from Zip Archives}{Written by James C. | 
					
						
							|  |  |  |           Ahlstrom, who also provided an implementation. Python 2.3 | 
					
						
							|  |  |  |           follows the specification in PEP 273, but uses an | 
					
						
							|  |  |  |           implementation written by Just van Rossum that uses the import | 
					
						
							|  |  |  |           hooks described in PEP 302.} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   \seepep{0302}{New Import Hooks}{The PEP to add the import hooks that help | 
					
						
							|  |  |  |           this module work.} | 
					
						
							|  |  |  | \end{seealso} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{zipimporter Objects \label{zipimporter-objects}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{classdesc}{zipimporter}{archivepath}  | 
					
						
							|  |  |  |   Create a new zipimporter instance. \var{archivepath} must be a path to | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |   a zipfile.  \exception{ZipImportError} is raised if \var{archivepath} | 
					
						
							|  |  |  |   doesn't point to a valid ZIP archive. | 
					
						
							| 
									
										
										
										
											2005-01-19 05:42:50 +00:00
										 |  |  | \end{classdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{find_module}{fullname\optional{, path}} | 
					
						
							|  |  |  |   Search for a module specified by \var{fullname}. \var{fullname} must be | 
					
						
							|  |  |  |   the fully qualified (dotted) module name. It returns the zipimporter | 
					
						
							|  |  |  |   instance itself if the module was found, or \constant{None} if it wasn't. | 
					
						
							|  |  |  |   The optional \var{path} argument is ignored---it's there for  | 
					
						
							|  |  |  |   compatibility with the importer protocol. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{get_code}{fullname} | 
					
						
							|  |  |  |   Return the code object for the specified module. Raise | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |   \exception{ZipImportError} if the module couldn't be found. | 
					
						
							| 
									
										
										
										
											2005-01-19 05:42:50 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{get_data}{pathname} | 
					
						
							|  |  |  |   Return the data associated with \var{pathname}. Raise \exception{IOError} | 
					
						
							|  |  |  |   if the file wasn't found. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{get_source}{fullname} | 
					
						
							|  |  |  |   Return the source code for the specified module. Raise | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |   \exception{ZipImportError} if the module couldn't be found, return | 
					
						
							| 
									
										
										
										
											2005-01-19 05:42:50 +00:00
										 |  |  |   \constant{None} if the archive does contain the module, but has | 
					
						
							|  |  |  |   no source for it. | 
					
						
							|  |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{is_package}{fullname} | 
					
						
							|  |  |  |   Return True if the module specified by \var{fullname} is a package. | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |   Raise \exception{ZipImportError} if the module couldn't be found. | 
					
						
							| 
									
										
										
										
											2005-01-19 05:42:50 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{methoddesc}{load_module}{fullname} | 
					
						
							|  |  |  |   Load the module specified by \var{fullname}. \var{fullname} must be the | 
					
						
							|  |  |  |   fully qualified (dotted) module name. It returns the imported | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |   module, or raises \exception{ZipImportError} if it wasn't found. | 
					
						
							| 
									
										
										
										
											2005-01-19 05:42:50 +00:00
										 |  |  | \end{methoddesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{Examples} | 
					
						
							|  |  |  | \nodename{zipimport Examples} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here is an example that imports a module from a ZIP archive - note that | 
					
						
							|  |  |  | the \module{zipimport} module is not explicitly used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | $ unzip -l /tmp/example.zip
 | 
					
						
							|  |  |  | Archive:  /tmp/example.zip | 
					
						
							|  |  |  |   Length     Date   Time    Name | 
					
						
							|  |  |  |  --------    ----   ----    ---- | 
					
						
							|  |  |  |      8467  11-26-02 22:30   jwzthreading.py | 
					
						
							|  |  |  |  --------                   ------- | 
					
						
							|  |  |  |      8467                   1 file | 
					
						
							|  |  |  | $ ./python
 | 
					
						
							|  |  |  | Python 2.3 (#1, Aug 1 2003, 19:54:32)  | 
					
						
							|  |  |  | >>> import sys | 
					
						
							|  |  |  | >>> sys.path.insert(0, '/tmp/example.zip')  # Add .zip file to front of path | 
					
						
							|  |  |  | >>> import jwzthreading | 
					
						
							|  |  |  | >>> jwzthreading.__file__ | 
					
						
							|  |  |  | '/tmp/example.zip/jwzthreading.py' | 
					
						
							|  |  |  | \end{verbatim} |