17db96d56Sopenharmony_ci:mod:`importlib.resources` -- Resources 27db96d56Sopenharmony_ci--------------------------------------- 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: importlib.resources 57db96d56Sopenharmony_ci :synopsis: Package resource reading, opening, and access 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci**Source code:** :source:`Lib/importlib/resources/__init__.py` 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci-------------- 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci.. versionadded:: 3.7 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ciThis module leverages Python's import system to provide access to *resources* 147db96d56Sopenharmony_ciwithin *packages*. If you can import a package, you can access resources 157db96d56Sopenharmony_ciwithin that package. Resources can be opened or read, in either binary or 167db96d56Sopenharmony_citext mode. 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ciResources are roughly akin to files inside directories, though it's important 197db96d56Sopenharmony_cito keep in mind that this is just a metaphor. Resources and packages **do 207db96d56Sopenharmony_cinot** have to exist as physical files and directories on the file system: 217db96d56Sopenharmony_cifor example, a package and its resources can be imported from a zip file using 227db96d56Sopenharmony_ci:py:mod:`zipimport`. 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci.. note:: 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci This module provides functionality similar to `pkg_resources 277db96d56Sopenharmony_ci <https://setuptools.readthedocs.io/en/latest/pkg_resources.html>`_ `Basic 287db96d56Sopenharmony_ci Resource Access 297db96d56Sopenharmony_ci <https://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access>`_ 307db96d56Sopenharmony_ci without the performance overhead of that package. This makes reading 317db96d56Sopenharmony_ci resources included in packages easier, with more stable and consistent 327db96d56Sopenharmony_ci semantics. 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci The standalone backport of this module provides more information 357db96d56Sopenharmony_ci on `using importlib.resources 367db96d56Sopenharmony_ci <https://importlib-resources.readthedocs.io/en/latest/using.html>`_ and 377db96d56Sopenharmony_ci `migrating from pkg_resources to importlib.resources 387db96d56Sopenharmony_ci <https://importlib-resources.readthedocs.io/en/latest/migration.html>`_. 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci:class:`Loaders <importlib.abc.Loader>` that wish to support resource reading should implement a 417db96d56Sopenharmony_ci``get_resource_reader(fullname)`` method as specified by 427db96d56Sopenharmony_ci:class:`importlib.resources.abc.ResourceReader`. 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci.. data:: Package 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci Whenever a function accepts a ``Package`` argument, you can pass in 477db96d56Sopenharmony_ci either a :class:`module object <types.ModuleType>` or a module name 487db96d56Sopenharmony_ci as a string. You can only pass module objects whose 497db96d56Sopenharmony_ci ``__spec__.submodule_search_locations`` is not ``None``. 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci The ``Package`` type is defined as ``Union[str, ModuleType]``. 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci.. function:: files(package) 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci Returns a :class:`~importlib.resources.abc.Traversable` object 567db96d56Sopenharmony_ci representing the resource container for the package (think directory) 577db96d56Sopenharmony_ci and its resources (think files). A Traversable may contain other 587db96d56Sopenharmony_ci containers (think subdirectories). 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 617db96d56Sopenharmony_ci :data:`Package` requirements. 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci .. versionadded:: 3.9 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci.. function:: as_file(traversable) 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci Given a :class:`~importlib.resources.abc.Traversable` object representing 687db96d56Sopenharmony_ci a file, typically from :func:`importlib.resources.files`, return 697db96d56Sopenharmony_ci a context manager for use in a :keyword:`with` statement. 707db96d56Sopenharmony_ci The context manager provides a :class:`pathlib.Path` object. 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci Exiting the context manager cleans up any temporary file created when the 737db96d56Sopenharmony_ci resource was extracted from e.g. a zip file. 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci Use ``as_file`` when the Traversable methods 767db96d56Sopenharmony_ci (``read_text``, etc) are insufficient and an actual file on 777db96d56Sopenharmony_ci the file system is required. 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci .. versionadded:: 3.9 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ciDeprecated functions 827db96d56Sopenharmony_ci-------------------- 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ciAn older, deprecated set of functions is still available, but is 857db96d56Sopenharmony_cischeduled for removal in a future version of Python. 867db96d56Sopenharmony_ciThe main drawback of these functions is that they do not support 877db96d56Sopenharmony_cidirectories: they assume all resources are located directly within a *package*. 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci.. data:: Resource 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci For *resource* arguments of the functions below, you can pass in 927db96d56Sopenharmony_ci the name of a resource as a string or 937db96d56Sopenharmony_ci a :class:`path-like object <os.PathLike>`. 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci The ``Resource`` type is defined as ``Union[str, os.PathLike]``. 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci.. function:: open_binary(package, resource) 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci Open for binary reading the *resource* within *package*. 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 1027db96d56Sopenharmony_ci ``Package`` requirements. *resource* is the name of the resource to open 1037db96d56Sopenharmony_ci within *package*; it may not contain path separators and it may not have 1047db96d56Sopenharmony_ci sub-resources (i.e. it cannot be a directory). This function returns a 1057db96d56Sopenharmony_ci ``typing.BinaryIO`` instance, a binary I/O stream open for reading. 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci .. deprecated:: 3.11 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci Calls to this function can be replaced by:: 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci files(package).joinpath(resource).open('rb') 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci.. function:: open_text(package, resource, encoding='utf-8', errors='strict') 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci Open for text reading the *resource* within *package*. By default, the 1177db96d56Sopenharmony_ci resource is opened for reading as UTF-8. 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 1207db96d56Sopenharmony_ci ``Package`` requirements. *resource* is the name of the resource to open 1217db96d56Sopenharmony_ci within *package*; it may not contain path separators and it may not have 1227db96d56Sopenharmony_ci sub-resources (i.e. it cannot be a directory). *encoding* and *errors* 1237db96d56Sopenharmony_ci have the same meaning as with built-in :func:`open`. 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci This function returns a ``typing.TextIO`` instance, a text I/O stream open 1267db96d56Sopenharmony_ci for reading. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci .. deprecated:: 3.11 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci Calls to this function can be replaced by:: 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci files(package).joinpath(resource).open('r', encoding=encoding) 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci.. function:: read_binary(package, resource) 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci Read and return the contents of the *resource* within *package* as 1387db96d56Sopenharmony_ci ``bytes``. 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 1417db96d56Sopenharmony_ci ``Package`` requirements. *resource* is the name of the resource to open 1427db96d56Sopenharmony_ci within *package*; it may not contain path separators and it may not have 1437db96d56Sopenharmony_ci sub-resources (i.e. it cannot be a directory). This function returns the 1447db96d56Sopenharmony_ci contents of the resource as :class:`bytes`. 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci .. deprecated:: 3.11 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci Calls to this function can be replaced by:: 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci files(package).joinpath(resource).read_bytes() 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci.. function:: read_text(package, resource, encoding='utf-8', errors='strict') 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci Read and return the contents of *resource* within *package* as a ``str``. 1567db96d56Sopenharmony_ci By default, the contents are read as strict UTF-8. 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 1597db96d56Sopenharmony_ci ``Package`` requirements. *resource* is the name of the resource to open 1607db96d56Sopenharmony_ci within *package*; it may not contain path separators and it may not have 1617db96d56Sopenharmony_ci sub-resources (i.e. it cannot be a directory). *encoding* and *errors* 1627db96d56Sopenharmony_ci have the same meaning as with built-in :func:`open`. This function 1637db96d56Sopenharmony_ci returns the contents of the resource as :class:`str`. 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci .. deprecated:: 3.11 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci Calls to this function can be replaced by:: 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci files(package).joinpath(resource).read_text(encoding=encoding) 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci.. function:: path(package, resource) 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci Return the path to the *resource* as an actual file system path. This 1757db96d56Sopenharmony_ci function returns a context manager for use in a :keyword:`with` statement. 1767db96d56Sopenharmony_ci The context manager provides a :class:`pathlib.Path` object. 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci Exiting the context manager cleans up any temporary file created when the 1797db96d56Sopenharmony_ci resource needs to be extracted from e.g. a zip file. 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 1827db96d56Sopenharmony_ci ``Package`` requirements. *resource* is the name of the resource to open 1837db96d56Sopenharmony_ci within *package*; it may not contain path separators and it may not have 1847db96d56Sopenharmony_ci sub-resources (i.e. it cannot be a directory). 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci .. deprecated:: 3.11 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci Calls to this function can be replaced using :func:`as_file`:: 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci as_file(files(package).joinpath(resource)) 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci.. function:: is_resource(package, name) 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci Return ``True`` if there is a resource named *name* in the package, 1967db96d56Sopenharmony_ci otherwise ``False``. 1977db96d56Sopenharmony_ci This function does not consider directories to be resources. 1987db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 1997db96d56Sopenharmony_ci ``Package`` requirements. 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci .. deprecated:: 3.11 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci Calls to this function can be replaced by:: 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci files(package).joinpath(resource).is_file() 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci 2087db96d56Sopenharmony_ci.. function:: contents(package) 2097db96d56Sopenharmony_ci 2107db96d56Sopenharmony_ci Return an iterable over the named items within the package. The iterable 2117db96d56Sopenharmony_ci returns :class:`str` resources (e.g. files) and non-resources 2127db96d56Sopenharmony_ci (e.g. directories). The iterable does not recurse into subdirectories. 2137db96d56Sopenharmony_ci 2147db96d56Sopenharmony_ci *package* is either a name or a module object which conforms to the 2157db96d56Sopenharmony_ci ``Package`` requirements. 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci .. deprecated:: 3.11 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci Calls to this function can be replaced by:: 2207db96d56Sopenharmony_ci 2217db96d56Sopenharmony_ci (resource.name for resource in files(package).iterdir() if resource.is_file()) 222