17db96d56Sopenharmony_ci:mod:`zipimport` --- Import modules from Zip archives 27db96d56Sopenharmony_ci===================================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: zipimport 57db96d56Sopenharmony_ci :synopsis: Support for importing Python modules from ZIP archives. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Just van Rossum <just@letterror.com> 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci**Source code:** :source:`Lib/zipimport.py` 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci-------------- 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ciThis module adds the ability to import Python modules (:file:`\*.py`, 147db96d56Sopenharmony_ci:file:`\*.pyc`) and packages from ZIP-format archives. It is usually not 157db96d56Sopenharmony_cineeded to use the :mod:`zipimport` module explicitly; it is automatically used 167db96d56Sopenharmony_ciby the built-in :keyword:`import` mechanism for :data:`sys.path` items that are paths 177db96d56Sopenharmony_cito ZIP archives. 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ciTypically, :data:`sys.path` is a list of directory names as strings. This module 207db96d56Sopenharmony_cialso allows an item of :data:`sys.path` to be a string naming a ZIP file archive. 217db96d56Sopenharmony_ciThe ZIP archive can contain a subdirectory structure to support package imports, 227db96d56Sopenharmony_ciand a path within the archive can be specified to only import from a 237db96d56Sopenharmony_cisubdirectory. For example, the path :file:`example.zip/lib/` would only 247db96d56Sopenharmony_ciimport from the :file:`lib/` subdirectory within the archive. 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ciAny files may be present in the ZIP archive, but importers are only invoked for 277db96d56Sopenharmony_ci:file:`.py` and :file:`.pyc` files. ZIP import of dynamic modules 287db96d56Sopenharmony_ci(:file:`.pyd`, :file:`.so`) is disallowed. Note that if an archive only contains 297db96d56Sopenharmony_ci:file:`.py` files, Python will not attempt to modify the archive by adding the 307db96d56Sopenharmony_cicorresponding :file:`.pyc` file, meaning that if a ZIP archive 317db96d56Sopenharmony_cidoesn't contain :file:`.pyc` files, importing may be rather slow. 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci.. versionchanged:: 3.8 347db96d56Sopenharmony_ci Previously, ZIP archives with an archive comment were not supported. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci.. seealso:: 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci `PKZIP Application Note <https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT>`_ 397db96d56Sopenharmony_ci Documentation on the ZIP file format by Phil Katz, the creator of the format and 407db96d56Sopenharmony_ci algorithms used. 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci :pep:`273` - Import Modules from Zip Archives 437db96d56Sopenharmony_ci Written by James C. Ahlstrom, who also provided an implementation. Python 2.3 447db96d56Sopenharmony_ci follows the specification in :pep:`273`, but uses an implementation written by Just 457db96d56Sopenharmony_ci van Rossum that uses the import hooks described in :pep:`302`. 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci :mod:`importlib` - The implementation of the import machinery 487db96d56Sopenharmony_ci Package providing the relevant protocols for all importers to 497db96d56Sopenharmony_ci implement. 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ciThis module defines an exception: 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci.. exception:: ZipImportError 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci Exception raised by zipimporter objects. It's a subclass of :exc:`ImportError`, 577db96d56Sopenharmony_ci so it can be caught as :exc:`ImportError`, too. 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci.. _zipimporter-objects: 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_cizipimporter Objects 637db96d56Sopenharmony_ci------------------- 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci:class:`zipimporter` is the class for importing ZIP files. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci.. class:: zipimporter(archivepath) 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci Create a new zipimporter instance. *archivepath* must be a path to a ZIP 707db96d56Sopenharmony_ci file, or to a specific path within a ZIP file. For example, an *archivepath* 717db96d56Sopenharmony_ci of :file:`foo/bar.zip/lib` will look for modules in the :file:`lib` directory 727db96d56Sopenharmony_ci inside the ZIP file :file:`foo/bar.zip` (provided that it exists). 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci :exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid ZIP 757db96d56Sopenharmony_ci archive. 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci .. method:: create_module(spec) 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci Implementation of :meth:`importlib.abc.Loader.create_module` that returns 807db96d56Sopenharmony_ci :const:`None` to explicitly request the default semantics. 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci .. versionadded:: 3.10 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci .. method:: exec_module(module) 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci Implementation of :meth:`importlib.abc.Loader.exec_module`. 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci .. versionadded:: 3.10 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci .. method:: find_loader(fullname, path=None) 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci An implementation of :meth:`importlib.abc.PathEntryFinder.find_loader`. 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci .. deprecated:: 3.10 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_ci Use :meth:`find_spec` instead. 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci .. method:: find_module(fullname, path=None) 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci Search for a module specified by *fullname*. *fullname* must be the fully 1047db96d56Sopenharmony_ci qualified (dotted) module name. It returns the zipimporter instance itself 1057db96d56Sopenharmony_ci if the module was found, or :const:`None` if it wasn't. The optional 1067db96d56Sopenharmony_ci *path* argument is ignored---it's there for compatibility with the 1077db96d56Sopenharmony_ci importer protocol. 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci .. deprecated:: 3.10 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci Use :meth:`find_spec` instead. 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci .. method:: find_spec(fullname, target=None) 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci An implementation of :meth:`importlib.abc.PathEntryFinder.find_spec`. 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci .. versionadded:: 3.10 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci .. method:: get_code(fullname) 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci Return the code object for the specified module. Raise 1247db96d56Sopenharmony_ci :exc:`ZipImportError` if the module couldn't be imported. 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci .. method:: get_data(pathname) 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci Return the data associated with *pathname*. Raise :exc:`OSError` if the 1307db96d56Sopenharmony_ci file wasn't found. 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci .. versionchanged:: 3.3 1337db96d56Sopenharmony_ci :exc:`IOError` used to be raised instead of :exc:`OSError`. 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci .. method:: get_filename(fullname) 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci Return the value ``__file__`` would be set to if the specified module 1397db96d56Sopenharmony_ci was imported. Raise :exc:`ZipImportError` if the module couldn't be 1407db96d56Sopenharmony_ci imported. 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci .. versionadded:: 3.1 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci 1457db96d56Sopenharmony_ci .. method:: get_source(fullname) 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci Return the source code for the specified module. Raise 1487db96d56Sopenharmony_ci :exc:`ZipImportError` if the module couldn't be found, return 1497db96d56Sopenharmony_ci :const:`None` if the archive does contain the module, but has no source 1507db96d56Sopenharmony_ci for it. 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci .. method:: is_package(fullname) 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci Return ``True`` if the module specified by *fullname* is a package. Raise 1567db96d56Sopenharmony_ci :exc:`ZipImportError` if the module couldn't be found. 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_ci .. method:: load_module(fullname) 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci Load the module specified by *fullname*. *fullname* must be the fully 1627db96d56Sopenharmony_ci qualified (dotted) module name. Returns the imported module on success, 1637db96d56Sopenharmony_ci raises :exc:`ZipImportError` on failure. 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci .. deprecated:: 3.10 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci Use :meth:`exec_module` instead. 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ci .. method:: invalidate_caches() 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci Clear out the internal cache of information about files found within 1737db96d56Sopenharmony_ci the ZIP archive. 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci .. versionadded:: 3.10 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci .. attribute:: archive 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci The file name of the importer's associated ZIP file, without a possible 1817db96d56Sopenharmony_ci subpath. 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci .. attribute:: prefix 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci The subpath within the ZIP file where modules are searched. This is the 1877db96d56Sopenharmony_ci empty string for zipimporter objects which point to the root of the ZIP 1887db96d56Sopenharmony_ci file. 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci The :attr:`archive` and :attr:`prefix` attributes, when combined with a 1917db96d56Sopenharmony_ci slash, equal the original *archivepath* argument given to the 1927db96d56Sopenharmony_ci :class:`zipimporter` constructor. 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci.. _zipimport-examples: 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_ciExamples 1987db96d56Sopenharmony_ci-------- 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ciHere is an example that imports a module from a ZIP archive - note that the 2017db96d56Sopenharmony_ci:mod:`zipimport` module is not explicitly used. 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci.. code-block:: shell-session 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci $ unzip -l example.zip 2067db96d56Sopenharmony_ci Archive: example.zip 2077db96d56Sopenharmony_ci Length Date Time Name 2087db96d56Sopenharmony_ci -------- ---- ---- ---- 2097db96d56Sopenharmony_ci 8467 11-26-02 22:30 jwzthreading.py 2107db96d56Sopenharmony_ci -------- ------- 2117db96d56Sopenharmony_ci 8467 1 file 2127db96d56Sopenharmony_ci $ ./python 2137db96d56Sopenharmony_ci Python 2.3 (#1, Aug 1 2003, 19:54:32) 2147db96d56Sopenharmony_ci >>> import sys 2157db96d56Sopenharmony_ci >>> sys.path.insert(0, 'example.zip') # Add .zip file to front of path 2167db96d56Sopenharmony_ci >>> import jwzthreading 2177db96d56Sopenharmony_ci >>> jwzthreading.__file__ 2187db96d56Sopenharmony_ci 'example.zip/jwzthreading.py' 219