Created import and importlib notes (markdown)
parent
1d5cfac278
commit
1c3eafde7e
|
@ -0,0 +1,116 @@
|
|||
```
|
||||
class module:
|
||||
__name__ # Full qualified name. Required.
|
||||
__loader__ # Loader object used to load the module. Required. Deprecated.
|
||||
__package__ # If the module is a package, same as __name__.
|
||||
# Otherwise name of parent package, or empty string for
|
||||
# top-level module. Optional.
|
||||
__spec__ # ModuleSpec object. Required (except sometimes for __main__).
|
||||
__path__ # Search path for modules inside package. Required iif a package.
|
||||
# Presence of __path__ indicates a package.
|
||||
# Iterable type other than list indicates a namespace package (PEP 420)
|
||||
__file__ # Path of the file (if any) the module was loaded from. Optional.
|
||||
__cached__ # Path of cached bytecode (if any) for the module. Optional.
|
||||
|
||||
class importlib._bootstrap.BuiltinImporter
|
||||
def is_package(cls, fullname) -> False:
|
||||
"built-in modules are never packages."
|
||||
|
||||
|
||||
class importlib.abc.MetaPathFinder:
|
||||
def find_spec(fullname, path, target=None)
|
||||
Should return None if this finder can't handle the module.
|
||||
Raise ModuleNotFoundError to halt any further search for the module.
|
||||
def invalidate_caches() # Optional
|
||||
|
||||
class importlib.abc.Loader:
|
||||
def create_module(spec)
|
||||
Return a created module object, or None if the spec should create it.
|
||||
Raise ImportError if anything prevents creation of the module object.
|
||||
def exec_module(spec)
|
||||
Execute the module. Don't return anything.
|
||||
|
||||
class importlib.abc.PathEntryFinder:
|
||||
def find_spec(fullname, target=None)
|
||||
def invalidate_caches() # Optional
|
||||
|
||||
|
||||
importlib.machinery.ModuleSpec: # Python 3.4+
|
||||
name # __name__
|
||||
loader # __loader__
|
||||
origin # __file__
|
||||
submodule_search_locations
|
||||
# __path__
|
||||
# None indicates a non-package.
|
||||
# List (even empty) indicates a package.
|
||||
# A custom iterable indicates a namespace package.
|
||||
loader_state
|
||||
cached # __cached__
|
||||
parent # __package__
|
||||
# Same as name, if the module is a package.
|
||||
# Otherwise name of parent package,
|
||||
# or empty string if a top-level module.
|
||||
has_location # True if origin refers to a loadable location
|
||||
|
||||
importlib.find_loader(name, path=None) # Python 3.3-3.11
|
||||
|
||||
importlib.util._find_spec(name, path, target=None)
|
||||
importlib.util.find_spec(name, package=None) # Python 3.4+
|
||||
importlib.util.spec_from_file_location(nmae, location=None, * loader=None,
|
||||
submodule_search_locations=...)
|
||||
|
||||
_imp module is implemented in https://github.com/python/cpython/blob/3.11/Python/import.c
|
||||
|
||||
|
||||
imp.find_module -> (Optional[fobj], Optional[path], (suffix, mode, type_)) # Python 2.x - 3.11
|
||||
```
|
||||
|
||||
| | `import.new_module()` | `types.ModuleType()` |
|
||||
|------------|-----------------------|----------------------|
|
||||
| Python 2.x | `bytes` or `unicode` | `bytes` |
|
||||
| Python 3.x | `unicode` | `unicode` |
|
||||
|
||||
```
|
||||
ansible_mitogen.module_finder.Module:
|
||||
name Unqualified name of the module.
|
||||
path Filesystem path of the module.
|
||||
kind One of the constants in `imp`, as returned in `imp.find_module()`
|
||||
parent `ansible_mitogen.module_finder.Module` of parent package (if any).
|
||||
|
||||
pkgutil.ModuleInfo(module_finder, name, ispkg) # namedtuple, Python 3.6+
|
||||
pkgutil.find_loader(full_name) # Deprecated 3.12, removal 3.14
|
||||
pkgutil.get_importer(path_item)
|
||||
pkgutil.get_loader(module_or_name) # Deprecated 3.12, removal 3.14
|
||||
|
||||
sys.builtin_module_names: tuple # Python 2.2+, atleast
|
||||
sys.stdlib_module_names: frozenset # Python 3.10, includes platform specific
|
||||
# even if not correct platform
|
||||
https://pypi.org/project/stdlibs/
|
||||
|
||||
|
||||
Module name must be a valid Python identifier
|
||||
Python 2: r'[A-Za-z_][A-Za-z0-9_]*'
|
||||
Python 3: https://docs.python.org/3/reference/lexical_analysis.html#identifiers
|
||||
|
||||
|
||||
Python 2.7:
|
||||
sys.meta_path == []
|
||||
sys.path_hooks == [<type 'zipimport.zipimporter'>]
|
||||
|
||||
Python 3.11:
|
||||
sys.meta_path == [
|
||||
<_distutils_hack.DistutilsMetaFinder object at 0x100874e90>,
|
||||
<class '_frozen_importlib.BuiltinImporter'>,
|
||||
<class '_frozen_importlib.FrozenImporter'>,
|
||||
<class '_frozen_importlib_external.PathFinder'>,
|
||||
]
|
||||
sys.path_hooks == [
|
||||
<class 'zipimport.zipimporter'>,
|
||||
<function FileFinder.path_hook.<locals>.path_hook_for_FileFinder at 0x1007e8900>.
|
||||
]
|
||||
```
|
||||
Sources
|
||||
* https://docs.python.org/3/library/importlib.html
|
||||
* https://peps.python.org/pep-0273/ Import from Zip Archives
|
||||
* https://peps.python.org/pep-0302/ Import hooks (sys.meta_path, sys.path_hooks)
|
||||
* https://peps.python.org/pep-0451/ ModuleSpec for import hooks
|
Loading…
Reference in New Issue