OxidizedFinder
Meta Path Finder¶
OxidizedFinder
is a Python type implementing a custom and
fully-featured meta path finder.
Oxidized is in its name because it is implemented in Rust.
Unlike traditional meta path finders which have to dynamically
discover resources (often by scanning the filesystem),
OxidizedFinder
instances maintain an index of known
resources. When a resource is requested, OxidizedFinder
can retrieve that resource by effectively performing 1 or 2 lookups
in a Rust HashMap
. This makes resource resolution extremely efficient,
as no filesystem probing or other explicit I/O is performed.
Instances of OxidizedFinder
are optionally bound to binary
blobs holding packed resources data. This is a custom serialization format
for expressing Python modules (source and bytecode), Python extension
modules, resource files, shared libraries, etc. This data format
along with a Rust library for interacting with it are defined by the
python-packed-resources
crate.
When an OxidizedFinder
instance is created, the packed resources
data is parsed into a Rust data structure. On a modern machine, parsing
this resources data for the entirety of the Python standard library
takes ~1 ms.
OxidizedFinder
instances can index built-in extension modules
and frozen modules, which are compiled into the Python interpreter. This
allows OxidizedFinder
to subsume functionality normally provided by
the BuiltinImporter
and FrozenImporter
meta path finders,
allowing you to potentially replace sys.meta_path
with a single
instance of OxidizedFinder
.
OxidizedFinder
in PyOxidizer Applications¶
When running from an application built with PyOxidizer (or using the
pyembed
crate directly), an OxidizedFinder
instance will
(likely) be automatically registered as the first element in
sys.meta_path
when starting a Python interpreter.
You can verify this inside a binary built with PyOxidizer:
>>> import sys
>>> sys.meta_path
[<OxidizedFinder object at 0x7f16bb6f93d0>]
Contrast with a typical Python environment:
>>> import sys
>>> sys.meta_path
[
<class '_frozen_importlib.BuiltinImporter'>,
<class '_frozen_importlib.FrozenImporter'>,
<class '_frozen_importlib_external.PathFinder'>
]
The OxidizedFinder
instance will (likely) be associated with
resources data embedded in the binary.
This OxidizedFinder
instance is constructed very early during Python
interpreter initialization. It is registered on sys.meta_path
before
the first import
requesting a .py
/.pyc
is performed, allowing
it to service every import
except those from the very few built-in
extension modules that are compiled into the interpreter and loaded as
part of Python initialization (e.g. the sys
module).
If OxidizedFinder
is being installed on sys.meta_path
, its
path_hook
method will be registered
as the first item on sys.path_hooks
.
If filesystem importing is disabled, all entries of sys.meta_path
and
sys.path_hooks
not related to OxidizedFinder
will be removed.
Python API¶
See OxidizedFinder
for the Python API documentation.