blob: eaae2bb04b74822a0de2ef85706cb819426ea76a [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`zipimport` --- Import modules from Zip archives
2=====================================================
3
4.. module:: zipimport
5 :synopsis: support for importing Python modules from ZIP archives.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Just van Rossum <just@letterror.com>
8
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04009--------------
Georg Brandl116aa622007-08-15 14:28:22 +000010
Georg Brandl116aa622007-08-15 14:28:22 +000011This module adds the ability to import Python modules (:file:`\*.py`,
Xiang Zhang0710d752017-03-11 13:02:52 +080012:file:`\*.pyc`) and packages from ZIP-format archives. It is usually not
Georg Brandl116aa622007-08-15 14:28:22 +000013needed to use the :mod:`zipimport` module explicitly; it is automatically used
Ezio Melotti2d826e82011-06-25 19:40:06 +030014by the built-in :keyword:`import` mechanism for :data:`sys.path` items that are paths
Georg Brandl116aa622007-08-15 14:28:22 +000015to ZIP archives.
16
Ezio Melotti2d826e82011-06-25 19:40:06 +030017Typically, :data:`sys.path` is a list of directory names as strings. This module
18also allows an item of :data:`sys.path` to be a string naming a ZIP file archive.
Georg Brandl116aa622007-08-15 14:28:22 +000019The ZIP archive can contain a subdirectory structure to support package imports,
20and a path within the archive can be specified to only import from a
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +010021subdirectory. For example, the path :file:`example.zip/lib/` would only
Georg Brandl116aa622007-08-15 14:28:22 +000022import from the :file:`lib/` subdirectory within the archive.
23
24Any files may be present in the ZIP archive, but only files :file:`.py` and
Brett Cannonf299abd2015-04-13 14:21:02 -040025:file:`.pyc` are available for import. ZIP import of dynamic modules
Georg Brandl116aa622007-08-15 14:28:22 +000026(:file:`.pyd`, :file:`.so`) is disallowed. Note that if an archive only contains
27:file:`.py` files, Python will not attempt to modify the archive by adding the
Brett Cannonf299abd2015-04-13 14:21:02 -040028corresponding :file:`.pyc` file, meaning that if a ZIP archive
Georg Brandl116aa622007-08-15 14:28:22 +000029doesn't contain :file:`.pyc` files, importing may be rather slow.
30
Benjamin Petersona28e7022010-01-09 18:53:06 +000031ZIP archives with an archive comment are currently not supported.
32
Georg Brandl116aa622007-08-15 14:28:22 +000033.. seealso::
34
Georg Brandl5d941342016-02-26 19:37:12 +010035 `PKZIP Application Note <https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT>`_
Georg Brandl116aa622007-08-15 14:28:22 +000036 Documentation on the ZIP file format by Phil Katz, the creator of the format and
37 algorithms used.
38
Victor Stinner766ad362010-05-14 14:36:18 +000039 :pep:`273` - Import Modules from Zip Archives
Georg Brandl116aa622007-08-15 14:28:22 +000040 Written by James C. Ahlstrom, who also provided an implementation. Python 2.3
41 follows the specification in PEP 273, but uses an implementation written by Just
42 van Rossum that uses the import hooks described in PEP 302.
43
Victor Stinner766ad362010-05-14 14:36:18 +000044 :pep:`302` - New Import Hooks
Georg Brandl116aa622007-08-15 14:28:22 +000045 The PEP to add the import hooks that help this module work.
46
47
Christian Heimes7f044312008-01-06 17:05:40 +000048This module defines an exception:
49
50.. exception:: ZipImportError
51
52 Exception raised by zipimporter objects. It's a subclass of :exc:`ImportError`,
53 so it can be caught as :exc:`ImportError`, too.
54
55
Georg Brandl116aa622007-08-15 14:28:22 +000056.. _zipimporter-objects:
57
58zipimporter Objects
59-------------------
60
Christian Heimes7f044312008-01-06 17:05:40 +000061:class:`zipimporter` is the class for importing ZIP files.
Georg Brandl116aa622007-08-15 14:28:22 +000062
63.. class:: zipimporter(archivepath)
64
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +000065 Create a new zipimporter instance. *archivepath* must be a path to a ZIP
66 file, or to a specific path within a ZIP file. For example, an *archivepath*
67 of :file:`foo/bar.zip/lib` will look for modules in the :file:`lib` directory
68 inside the ZIP file :file:`foo/bar.zip` (provided that it exists).
69
Georg Brandl116aa622007-08-15 14:28:22 +000070 :exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid ZIP
71 archive.
72
Benjamin Petersone41251e2008-04-25 01:59:09 +000073 .. method:: find_module(fullname[, path])
Georg Brandl116aa622007-08-15 14:28:22 +000074
Benjamin Petersone41251e2008-04-25 01:59:09 +000075 Search for a module specified by *fullname*. *fullname* must be the fully
76 qualified (dotted) module name. It returns the zipimporter instance itself
77 if the module was found, or :const:`None` if it wasn't. The optional
78 *path* argument is ignored---it's there for compatibility with the
79 importer protocol.
Georg Brandl116aa622007-08-15 14:28:22 +000080
81
Benjamin Petersone41251e2008-04-25 01:59:09 +000082 .. method:: get_code(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +000083
Benjamin Petersone41251e2008-04-25 01:59:09 +000084 Return the code object for the specified module. Raise
85 :exc:`ZipImportError` if the module couldn't be found.
Georg Brandl116aa622007-08-15 14:28:22 +000086
87
Benjamin Petersone41251e2008-04-25 01:59:09 +000088 .. method:: get_data(pathname)
Georg Brandl116aa622007-08-15 14:28:22 +000089
Antoine Pitrou62ab10a02011-10-12 20:10:51 +020090 Return the data associated with *pathname*. Raise :exc:`OSError` if the
Benjamin Petersone41251e2008-04-25 01:59:09 +000091 file wasn't found.
Georg Brandl116aa622007-08-15 14:28:22 +000092
Antoine Pitrou62ab10a02011-10-12 20:10:51 +020093 .. versionchanged:: 3.3
94 :exc:`IOError` used to be raised instead of :exc:`OSError`.
95
Georg Brandl116aa622007-08-15 14:28:22 +000096
Nick Coghlan9a1d6e32009-02-08 03:37:27 +000097 .. method:: get_filename(fullname)
98
99 Return the value ``__file__`` would be set to if the specified module
100 was imported. Raise :exc:`ZipImportError` if the module couldn't be
101 found.
102
Georg Brandl67b21b72010-08-17 15:07:14 +0000103 .. versionadded:: 3.1
Nick Coghlan9a1d6e32009-02-08 03:37:27 +0000104
105
Benjamin Petersone41251e2008-04-25 01:59:09 +0000106 .. method:: get_source(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +0000107
Benjamin Petersone41251e2008-04-25 01:59:09 +0000108 Return the source code for the specified module. Raise
109 :exc:`ZipImportError` if the module couldn't be found, return
110 :const:`None` if the archive does contain the module, but has no source
111 for it.
Georg Brandl116aa622007-08-15 14:28:22 +0000112
113
Benjamin Petersone41251e2008-04-25 01:59:09 +0000114 .. method:: is_package(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +0000115
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200116 Return ``True`` if the module specified by *fullname* is a package. Raise
Benjamin Petersone41251e2008-04-25 01:59:09 +0000117 :exc:`ZipImportError` if the module couldn't be found.
Georg Brandl116aa622007-08-15 14:28:22 +0000118
119
Benjamin Petersone41251e2008-04-25 01:59:09 +0000120 .. method:: load_module(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +0000121
Benjamin Petersone41251e2008-04-25 01:59:09 +0000122 Load the module specified by *fullname*. *fullname* must be the fully
123 qualified (dotted) module name. It returns the imported module, or raises
124 :exc:`ZipImportError` if it wasn't found.
Georg Brandl116aa622007-08-15 14:28:22 +0000125
126
Benjamin Petersone41251e2008-04-25 01:59:09 +0000127 .. attribute:: archive
Christian Heimes7f044312008-01-06 17:05:40 +0000128
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +0000129 The file name of the importer's associated ZIP file, without a possible
130 subpath.
Christian Heimes7f044312008-01-06 17:05:40 +0000131
132
Benjamin Petersone41251e2008-04-25 01:59:09 +0000133 .. attribute:: prefix
Christian Heimes7f044312008-01-06 17:05:40 +0000134
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +0000135 The subpath within the ZIP file where modules are searched. This is the
136 empty string for zipimporter objects which point to the root of the ZIP
137 file.
138
139 The :attr:`archive` and :attr:`prefix` attributes, when combined with a
140 slash, equal the original *archivepath* argument given to the
141 :class:`zipimporter` constructor.
Christian Heimes7f044312008-01-06 17:05:40 +0000142
Georg Brandl116aa622007-08-15 14:28:22 +0000143
144.. _zipimport-examples:
145
Christian Heimes7f044312008-01-06 17:05:40 +0000146Examples
147--------
148
Georg Brandl116aa622007-08-15 14:28:22 +0000149Here is an example that imports a module from a ZIP archive - note that the
Martin Panter1050d2d2016-07-26 11:18:21 +0200150:mod:`zipimport` module is not explicitly used.
151
152.. code-block:: shell-session
Georg Brandl116aa622007-08-15 14:28:22 +0000153
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100154 $ unzip -l example.zip
155 Archive: example.zip
Georg Brandl116aa622007-08-15 14:28:22 +0000156 Length Date Time Name
157 -------- ---- ---- ----
158 8467 11-26-02 22:30 jwzthreading.py
159 -------- -------
160 8467 1 file
161 $ ./python
Georg Brandl48310cd2009-01-03 21:18:54 +0000162 Python 2.3 (#1, Aug 1 2003, 19:54:32)
Georg Brandl116aa622007-08-15 14:28:22 +0000163 >>> import sys
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100164 >>> sys.path.insert(0, 'example.zip') # Add .zip file to front of path
Georg Brandl116aa622007-08-15 14:28:22 +0000165 >>> import jwzthreading
166 >>> jwzthreading.__file__
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100167 'example.zip/jwzthreading.py'