blob: 828e9fcfcf2b55aebda6922a70ca4b90361c9ebb [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001
2:mod:`zipimport` --- Import modules from Zip archives
3=====================================================
4
5.. module:: zipimport
6 :synopsis: support for importing Python modules from ZIP archives.
7.. moduleauthor:: Just van Rossum <just@letterror.com>
8
9
10.. versionadded:: 2.3
11
12This module adds the ability to import Python modules (:file:`\*.py`,
13:file:`\*.py[co]`) and packages from ZIP-format archives. It is usually not
14needed to use the :mod:`zipimport` module explicitly; it is automatically used
Ezio Melotti196273e2011-06-25 19:40:06 +030015by the built-in :keyword:`import` mechanism for :data:`sys.path` items that are paths
Georg Brandl8ec7f652007-08-15 14:28:01 +000016to ZIP archives.
17
Ezio Melotti196273e2011-06-25 19:40:06 +030018Typically, :data:`sys.path` is a list of directory names as strings. This module
19also allows an item of :data:`sys.path` to be a string naming a ZIP file archive.
Georg Brandl8ec7f652007-08-15 14:28:01 +000020The ZIP archive can contain a subdirectory structure to support package imports,
21and a path within the archive can be specified to only import from a
Petri Lehtinen0b785032013-02-23 19:24:08 +010022subdirectory. For example, the path :file:`example.zip/lib/` would only
Georg Brandl8ec7f652007-08-15 14:28:01 +000023import from the :file:`lib/` subdirectory within the archive.
24
25Any files may be present in the ZIP archive, but only files :file:`.py` and
26:file:`.py[co]` are available for import. ZIP import of dynamic modules
27(:file:`.pyd`, :file:`.so`) is disallowed. Note that if an archive only contains
28:file:`.py` files, Python will not attempt to modify the archive by adding the
29corresponding :file:`.pyc` or :file:`.pyo` file, meaning that if a ZIP archive
30doesn't contain :file:`.pyc` files, importing may be rather slow.
31
32Using the built-in :func:`reload` function will fail if called on a module
33loaded from a ZIP archive; it is unlikely that :func:`reload` would be needed,
34since this would imply that the ZIP has been altered during runtime.
35
Georg Brandl705a3582010-01-06 18:26:08 +000036ZIP archives with an archive comment are currently not supported.
37
Georg Brandl8ec7f652007-08-15 14:28:01 +000038.. seealso::
39
Georg Brandl02677812008-03-15 00:20:19 +000040 `PKZIP Application Note <http://www.pkware.com/documents/casestudies/APPNOTE.TXT>`_
Georg Brandl8ec7f652007-08-15 14:28:01 +000041 Documentation on the ZIP file format by Phil Katz, the creator of the format and
42 algorithms used.
43
Victor Stinner8ded4772010-05-14 14:20:07 +000044 :pep:`273` - Import Modules from Zip Archives
Georg Brandl8ec7f652007-08-15 14:28:01 +000045 Written by James C. Ahlstrom, who also provided an implementation. Python 2.3
46 follows the specification in PEP 273, but uses an implementation written by Just
47 van Rossum that uses the import hooks described in PEP 302.
48
Victor Stinner8ded4772010-05-14 14:20:07 +000049 :pep:`302` - New Import Hooks
Georg Brandl8ec7f652007-08-15 14:28:01 +000050 The PEP to add the import hooks that help this module work.
51
52
Georg Brandle260ba22008-01-06 16:49:50 +000053This module defines an exception:
54
55.. exception:: ZipImportError
56
57 Exception raised by zipimporter objects. It's a subclass of :exc:`ImportError`,
58 so it can be caught as :exc:`ImportError`, too.
59
60
Georg Brandl8ec7f652007-08-15 14:28:01 +000061.. _zipimporter-objects:
62
63zipimporter Objects
64-------------------
65
Georg Brandle260ba22008-01-06 16:49:50 +000066:class:`zipimporter` is the class for importing ZIP files.
Georg Brandl8ec7f652007-08-15 14:28:01 +000067
68.. class:: zipimporter(archivepath)
69
Georg Brandl6a57c082008-05-11 15:05:13 +000070 Create a new zipimporter instance. *archivepath* must be a path to a ZIP
71 file, or to a specific path within a ZIP file. For example, an *archivepath*
72 of :file:`foo/bar.zip/lib` will look for modules in the :file:`lib` directory
73 inside the ZIP file :file:`foo/bar.zip` (provided that it exists).
74
Georg Brandl8ec7f652007-08-15 14:28:01 +000075 :exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid ZIP
76 archive.
77
Benjamin Petersonc7b05922008-04-25 01:29:10 +000078 .. method:: find_module(fullname[, path])
Georg Brandl8ec7f652007-08-15 14:28:01 +000079
Benjamin Petersonc7b05922008-04-25 01:29:10 +000080 Search for a module specified by *fullname*. *fullname* must be the fully
81 qualified (dotted) module name. It returns the zipimporter instance itself
82 if the module was found, or :const:`None` if it wasn't. The optional
83 *path* argument is ignored---it's there for compatibility with the
84 importer protocol.
Georg Brandl8ec7f652007-08-15 14:28:01 +000085
86
Benjamin Petersonc7b05922008-04-25 01:29:10 +000087 .. method:: get_code(fullname)
Georg Brandl8ec7f652007-08-15 14:28:01 +000088
Benjamin Petersonc7b05922008-04-25 01:29:10 +000089 Return the code object for the specified module. Raise
90 :exc:`ZipImportError` if the module couldn't be found.
Georg Brandl8ec7f652007-08-15 14:28:01 +000091
92
Benjamin Petersonc7b05922008-04-25 01:29:10 +000093 .. method:: get_data(pathname)
Georg Brandl8ec7f652007-08-15 14:28:01 +000094
Benjamin Petersonc7b05922008-04-25 01:29:10 +000095 Return the data associated with *pathname*. Raise :exc:`IOError` if the
96 file wasn't found.
Georg Brandl8ec7f652007-08-15 14:28:01 +000097
98
Nick Coghlan0194f5b2009-02-08 03:17:00 +000099 .. method:: get_filename(fullname)
100
101 Return the value ``__file__`` would be set to if the specified module
102 was imported. Raise :exc:`ZipImportError` if the module couldn't be
103 found.
104
105 .. versionadded:: 2.7
106
107
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000108 .. method:: get_source(fullname)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000109
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000110 Return the source code for the specified module. Raise
111 :exc:`ZipImportError` if the module couldn't be found, return
112 :const:`None` if the archive does contain the module, but has no source
113 for it.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000114
115
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000116 .. method:: is_package(fullname)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000117
Serhiy Storchaka26d936a2013-11-29 12:16:53 +0200118 Return ``True`` if the module specified by *fullname* is a package. Raise
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000119 :exc:`ZipImportError` if the module couldn't be found.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000120
121
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000122 .. method:: load_module(fullname)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000123
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000124 Load the module specified by *fullname*. *fullname* must be the fully
125 qualified (dotted) module name. It returns the imported module, or raises
126 :exc:`ZipImportError` if it wasn't found.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000127
128
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000129 .. attribute:: archive
Georg Brandle260ba22008-01-06 16:49:50 +0000130
Georg Brandl6a57c082008-05-11 15:05:13 +0000131 The file name of the importer's associated ZIP file, without a possible
132 subpath.
Georg Brandle260ba22008-01-06 16:49:50 +0000133
134
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000135 .. attribute:: prefix
Georg Brandle260ba22008-01-06 16:49:50 +0000136
Georg Brandl6a57c082008-05-11 15:05:13 +0000137 The subpath within the ZIP file where modules are searched. This is the
138 empty string for zipimporter objects which point to the root of the ZIP
139 file.
140
141 The :attr:`archive` and :attr:`prefix` attributes, when combined with a
142 slash, equal the original *archivepath* argument given to the
143 :class:`zipimporter` constructor.
Georg Brandle260ba22008-01-06 16:49:50 +0000144
Georg Brandl8ec7f652007-08-15 14:28:01 +0000145
146.. _zipimport-examples:
147
Georg Brandle260ba22008-01-06 16:49:50 +0000148Examples
149--------
150
Georg Brandl8ec7f652007-08-15 14:28:01 +0000151Here is an example that imports a module from a ZIP archive - note that the
152:mod:`zipimport` module is not explicitly used. ::
153
Petri Lehtinen0b785032013-02-23 19:24:08 +0100154 $ unzip -l example.zip
155 Archive: example.zip
Georg Brandl8ec7f652007-08-15 14:28:01 +0000156 Length Date Time Name
157 -------- ---- ---- ----
158 8467 11-26-02 22:30 jwzthreading.py
159 -------- -------
160 8467 1 file
161 $ ./python
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000162 Python 2.3 (#1, Aug 1 2003, 19:54:32)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000163 >>> import sys
Petri Lehtinen0b785032013-02-23 19:24:08 +0100164 >>> sys.path.insert(0, 'example.zip') # Add .zip file to front of path
Georg Brandl8ec7f652007-08-15 14:28:01 +0000165 >>> import jwzthreading
166 >>> jwzthreading.__file__
Petri Lehtinen0b785032013-02-23 19:24:08 +0100167 'example.zip/jwzthreading.py'
Georg Brandl8ec7f652007-08-15 14:28:01 +0000168