blob: 62e1e47e980e179876c5aee67895db6bc3fe6d55 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`zipimport` --- Import modules from Zip archives
2=====================================================
3
4.. module:: zipimport
Sanchit Khuranaf8a63162019-11-26 03:47:59 +05305 :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
Xtreake307e5c2019-05-15 21:48:35 +05309**Source code:** :source:`Lib/zipimport.py`
10
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040011--------------
Georg Brandl116aa622007-08-15 14:28:22 +000012
Georg Brandl116aa622007-08-15 14:28:22 +000013This module adds the ability to import Python modules (:file:`\*.py`,
Xiang Zhang0710d752017-03-11 13:02:52 +080014:file:`\*.pyc`) and packages from ZIP-format archives. It is usually not
Georg Brandl116aa622007-08-15 14:28:22 +000015needed to use the :mod:`zipimport` module explicitly; it is automatically used
Ezio Melotti2d826e82011-06-25 19:40:06 +030016by the built-in :keyword:`import` mechanism for :data:`sys.path` items that are paths
Georg Brandl116aa622007-08-15 14:28:22 +000017to ZIP archives.
18
Ezio Melotti2d826e82011-06-25 19:40:06 +030019Typically, :data:`sys.path` is a list of directory names as strings. This module
20also allows an item of :data:`sys.path` to be a string naming a ZIP file archive.
Georg Brandl116aa622007-08-15 14:28:22 +000021The ZIP archive can contain a subdirectory structure to support package imports,
22and a path within the archive can be specified to only import from a
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +010023subdirectory. For example, the path :file:`example.zip/lib/` would only
Georg Brandl116aa622007-08-15 14:28:22 +000024import from the :file:`lib/` subdirectory within the archive.
25
26Any files may be present in the ZIP archive, but only files :file:`.py` and
Brett Cannonf299abd2015-04-13 14:21:02 -040027:file:`.pyc` are available for import. ZIP import of dynamic modules
Georg Brandl116aa622007-08-15 14:28:22 +000028(:file:`.pyd`, :file:`.so`) is disallowed. Note that if an archive only contains
29:file:`.py` files, Python will not attempt to modify the archive by adding the
Brett Cannonf299abd2015-04-13 14:21:02 -040030corresponding :file:`.pyc` file, meaning that if a ZIP archive
Georg Brandl116aa622007-08-15 14:28:22 +000031doesn't contain :file:`.pyc` files, importing may be rather slow.
32
Zackery Spytz5a5ce062018-09-25 13:15:47 -060033.. versionchanged:: 3.8
34 Previously, ZIP archives with an archive comment were not supported.
Benjamin Petersona28e7022010-01-09 18:53:06 +000035
Georg Brandl116aa622007-08-15 14:28:22 +000036.. seealso::
37
Georg Brandl5d941342016-02-26 19:37:12 +010038 `PKZIP Application Note <https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT>`_
Georg Brandl116aa622007-08-15 14:28:22 +000039 Documentation on the ZIP file format by Phil Katz, the creator of the format and
40 algorithms used.
41
Victor Stinner766ad362010-05-14 14:36:18 +000042 :pep:`273` - Import Modules from Zip Archives
Georg Brandl116aa622007-08-15 14:28:22 +000043 Written by James C. Ahlstrom, who also provided an implementation. Python 2.3
Stéphane Wirtel12e696b2018-10-27 00:58:26 +020044 follows the specification in :pep:`273`, but uses an implementation written by Just
45 van Rossum that uses the import hooks described in :pep:`302`.
Georg Brandl116aa622007-08-15 14:28:22 +000046
Brett Cannond2e94bb2020-11-13 15:14:58 -080047 :mod:`importlib` - The implementation of the import machinery
48 Package providing the relevant protocols for all importers to
49 implement.
Georg Brandl116aa622007-08-15 14:28:22 +000050
51
Christian Heimes7f044312008-01-06 17:05:40 +000052This module defines an exception:
53
54.. exception:: ZipImportError
55
56 Exception raised by zipimporter objects. It's a subclass of :exc:`ImportError`,
57 so it can be caught as :exc:`ImportError`, too.
58
59
Georg Brandl116aa622007-08-15 14:28:22 +000060.. _zipimporter-objects:
61
62zipimporter Objects
63-------------------
64
Christian Heimes7f044312008-01-06 17:05:40 +000065:class:`zipimporter` is the class for importing ZIP files.
Georg Brandl116aa622007-08-15 14:28:22 +000066
67.. class:: zipimporter(archivepath)
68
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +000069 Create a new zipimporter instance. *archivepath* must be a path to a ZIP
70 file, or to a specific path within a ZIP file. For example, an *archivepath*
71 of :file:`foo/bar.zip/lib` will look for modules in the :file:`lib` directory
72 inside the ZIP file :file:`foo/bar.zip` (provided that it exists).
73
Georg Brandl116aa622007-08-15 14:28:22 +000074 :exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid ZIP
75 archive.
76
Brett Cannond2e94bb2020-11-13 15:14:58 -080077 .. method:: create_module(spec)
78
79 Implementation of :meth:`importlib.abc.Loader.create_module` that returns
80 :const:`None` to explicitly request the default semantics.
81
82 .. versionadded:: 3.10
83
84
85 .. method:: exec_module(module)
86
87 Implementation of :meth:`importlib.abc.Loader.exec_module`.
88
89 .. versionadded:: 3.10
90
91
92 .. method:: find_loader(fullname, path=None)
93
94 An implementation of :meth:`importlib.abc.PathEntryFinder.find_loader`.
95
96 .. deprecated:: 3.10
97
98 Use :meth:`find_spec` instead.
99
100
101 .. method:: find_module(fullname, path=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000102
Benjamin Petersone41251e2008-04-25 01:59:09 +0000103 Search for a module specified by *fullname*. *fullname* must be the fully
104 qualified (dotted) module name. It returns the zipimporter instance itself
105 if the module was found, or :const:`None` if it wasn't. The optional
106 *path* argument is ignored---it's there for compatibility with the
107 importer protocol.
Georg Brandl116aa622007-08-15 14:28:22 +0000108
Brett Cannond2e94bb2020-11-13 15:14:58 -0800109 .. deprecated:: 3.10
110
111 Use :meth:`find_spec` instead.
112
113
114 .. method:: find_spec(fullname, target=None)
115
116 An implementation of :meth:`importlib.abc.PathEntryFinder.find_spec`.
117
118 .. versionadded:: 3.10
119
Georg Brandl116aa622007-08-15 14:28:22 +0000120
Benjamin Petersone41251e2008-04-25 01:59:09 +0000121 .. method:: get_code(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +0000122
Benjamin Petersone41251e2008-04-25 01:59:09 +0000123 Return the code object for the specified module. Raise
Irit Katrielfb340962020-12-19 00:09:54 +0000124 :exc:`ZipImportError` if the module couldn't be imported.
Georg Brandl116aa622007-08-15 14:28:22 +0000125
126
Benjamin Petersone41251e2008-04-25 01:59:09 +0000127 .. method:: get_data(pathname)
Georg Brandl116aa622007-08-15 14:28:22 +0000128
Antoine Pitrou62ab10a02011-10-12 20:10:51 +0200129 Return the data associated with *pathname*. Raise :exc:`OSError` if the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000130 file wasn't found.
Georg Brandl116aa622007-08-15 14:28:22 +0000131
Antoine Pitrou62ab10a02011-10-12 20:10:51 +0200132 .. versionchanged:: 3.3
133 :exc:`IOError` used to be raised instead of :exc:`OSError`.
134
Georg Brandl116aa622007-08-15 14:28:22 +0000135
Nick Coghlan9a1d6e32009-02-08 03:37:27 +0000136 .. method:: get_filename(fullname)
137
138 Return the value ``__file__`` would be set to if the specified module
139 was imported. Raise :exc:`ZipImportError` if the module couldn't be
Irit Katrielfb340962020-12-19 00:09:54 +0000140 imported.
Nick Coghlan9a1d6e32009-02-08 03:37:27 +0000141
Georg Brandl67b21b72010-08-17 15:07:14 +0000142 .. versionadded:: 3.1
Nick Coghlan9a1d6e32009-02-08 03:37:27 +0000143
144
Benjamin Petersone41251e2008-04-25 01:59:09 +0000145 .. method:: get_source(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Benjamin Petersone41251e2008-04-25 01:59:09 +0000147 Return the source code for the specified module. Raise
148 :exc:`ZipImportError` if the module couldn't be found, return
149 :const:`None` if the archive does contain the module, but has no source
150 for it.
Georg Brandl116aa622007-08-15 14:28:22 +0000151
152
Benjamin Petersone41251e2008-04-25 01:59:09 +0000153 .. method:: is_package(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +0000154
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200155 Return ``True`` if the module specified by *fullname* is a package. Raise
Benjamin Petersone41251e2008-04-25 01:59:09 +0000156 :exc:`ZipImportError` if the module couldn't be found.
Georg Brandl116aa622007-08-15 14:28:22 +0000157
158
Benjamin Petersone41251e2008-04-25 01:59:09 +0000159 .. method:: load_module(fullname)
Georg Brandl116aa622007-08-15 14:28:22 +0000160
Benjamin Petersone41251e2008-04-25 01:59:09 +0000161 Load the module specified by *fullname*. *fullname* must be the fully
Irit Katrielfb340962020-12-19 00:09:54 +0000162 qualified (dotted) module name. Returns the imported module on success,
163 raises :exc:`ZipImportError` on failure.
Georg Brandl116aa622007-08-15 14:28:22 +0000164
Brett Cannond2e94bb2020-11-13 15:14:58 -0800165 .. deprecated:: 3.10
166
167 Use :meth:`exec_module` instead.
168
Benjamin Petersone41251e2008-04-25 01:59:09 +0000169 .. attribute:: archive
Christian Heimes7f044312008-01-06 17:05:40 +0000170
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +0000171 The file name of the importer's associated ZIP file, without a possible
172 subpath.
Christian Heimes7f044312008-01-06 17:05:40 +0000173
174
Benjamin Petersone41251e2008-04-25 01:59:09 +0000175 .. attribute:: prefix
Christian Heimes7f044312008-01-06 17:05:40 +0000176
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +0000177 The subpath within the ZIP file where modules are searched. This is the
178 empty string for zipimporter objects which point to the root of the ZIP
179 file.
180
181 The :attr:`archive` and :attr:`prefix` attributes, when combined with a
182 slash, equal the original *archivepath* argument given to the
183 :class:`zipimporter` constructor.
Christian Heimes7f044312008-01-06 17:05:40 +0000184
Georg Brandl116aa622007-08-15 14:28:22 +0000185
186.. _zipimport-examples:
187
Christian Heimes7f044312008-01-06 17:05:40 +0000188Examples
189--------
190
Georg Brandl116aa622007-08-15 14:28:22 +0000191Here is an example that imports a module from a ZIP archive - note that the
Martin Panter1050d2d2016-07-26 11:18:21 +0200192:mod:`zipimport` module is not explicitly used.
193
194.. code-block:: shell-session
Georg Brandl116aa622007-08-15 14:28:22 +0000195
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100196 $ unzip -l example.zip
197 Archive: example.zip
Georg Brandl116aa622007-08-15 14:28:22 +0000198 Length Date Time Name
199 -------- ---- ---- ----
200 8467 11-26-02 22:30 jwzthreading.py
201 -------- -------
202 8467 1 file
203 $ ./python
Georg Brandl48310cd2009-01-03 21:18:54 +0000204 Python 2.3 (#1, Aug 1 2003, 19:54:32)
Georg Brandl116aa622007-08-15 14:28:22 +0000205 >>> import sys
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100206 >>> sys.path.insert(0, 'example.zip') # Add .zip file to front of path
Georg Brandl116aa622007-08-15 14:28:22 +0000207 >>> import jwzthreading
208 >>> jwzthreading.__file__
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100209 'example.zip/jwzthreading.py'