|  | .. _library-intro: | 
|  |  | 
|  | ************ | 
|  | Introduction | 
|  | ************ | 
|  |  | 
|  | The "Python library" contains several different kinds of components. | 
|  |  | 
|  | It contains data types that would normally be considered part of the "core" of a | 
|  | language, such as numbers and lists.  For these types, the Python language core | 
|  | defines the form of literals and places some constraints on their semantics, but | 
|  | does not fully define the semantics.  (On the other hand, the language core does | 
|  | define syntactic properties like the spelling and priorities of operators.) | 
|  |  | 
|  | The library also contains built-in functions and exceptions --- objects that can | 
|  | be used by all Python code without the need of an :keyword:`import` statement. | 
|  | Some of these are defined by the core language, but many are not essential for | 
|  | the core semantics and are only described here. | 
|  |  | 
|  | The bulk of the library, however, consists of a collection of modules. There are | 
|  | many ways to dissect this collection.  Some modules are written in C and built | 
|  | in to the Python interpreter; others are written in Python and imported in | 
|  | source form.  Some modules provide interfaces that are highly specific to | 
|  | Python, like printing a stack trace; some provide interfaces that are specific | 
|  | to particular operating systems, such as access to specific hardware; others | 
|  | provide interfaces that are specific to a particular application domain, like | 
|  | the World Wide Web. Some modules are available in all versions and ports of | 
|  | Python; others are only available when the underlying system supports or | 
|  | requires them; yet others are available only when a particular configuration | 
|  | option was chosen at the time when Python was compiled and installed. | 
|  |  | 
|  | This manual is organized "from the inside out:" it first describes the built-in | 
|  | functions, data types and exceptions, and finally the modules, grouped in | 
|  | chapters of related modules. | 
|  |  | 
|  | This means that if you start reading this manual from the start, and skip to the | 
|  | next chapter when you get bored, you will get a reasonable overview of the | 
|  | available modules and application areas that are supported by the Python | 
|  | library.  Of course, you don't *have* to read it like a novel --- you can also | 
|  | browse the table of contents (in front of the manual), or look for a specific | 
|  | function, module or term in the index (in the back).  And finally, if you enjoy | 
|  | learning about random subjects, you choose a random page number (see module | 
|  | :mod:`random`) and read a section or two.  Regardless of the order in which you | 
|  | read the sections of this manual, it helps to start with chapter | 
|  | :ref:`built-in-funcs`, as the remainder of the manual assumes familiarity with | 
|  | this material. | 
|  |  | 
|  | Let the show begin! | 
|  |  | 
|  |  | 
|  | .. _availability: | 
|  |  | 
|  | Notes on availability | 
|  | ===================== | 
|  |  | 
|  | * An "Availability: Unix" note means that this function is commonly found on | 
|  | Unix systems.  It does not make any claims about its existence on a specific | 
|  | operating system. | 
|  |  | 
|  | * If not separately noted, all functions that claim "Availability: Unix" are | 
|  | supported on macOS, which builds on a Unix core. | 
|  |  | 
|  | * If an availability note contains both a minimum Kernel version and a minimum | 
|  | libc version, then both conditions must hold. For example a feature with note | 
|  | *Availability: Linux >= 3.17 with glibc >= 2.27* requires both Linux 3.17 or | 
|  | newer and glibc 2.27 or newer. | 
|  |  | 
|  | .. _wasm-availability: | 
|  |  | 
|  | WebAssembly platforms | 
|  | --------------------- | 
|  |  | 
|  | The `WebAssembly`_ platforms ``wasm32-emscripten`` (`Emscripten`_) and | 
|  | ``wasm32-wasi`` (`WASI`_) provide a subset of POSIX APIs. WebAssembly runtimes | 
|  | and browsers are sandboxed and have limited access to the host and external | 
|  | resources. Any Python standard library module that uses processes, threading, | 
|  | networking, signals, or other forms of inter-process communication (IPC), is | 
|  | either not available or may not work as on other Unix-like systems. File I/O, | 
|  | file system, and Unix permission-related functions are restricted, too. | 
|  | Emscripten does not permit blocking I/O. Other blocking operations like | 
|  | :func:`~time.sleep` block the browser event loop. | 
|  |  | 
|  | The properties and behavior of Python on WebAssembly platforms depend on the | 
|  | `Emscripten`_-SDK or `WASI`_-SDK version, WASM runtimes (browser, NodeJS, | 
|  | `wasmtime`_), and Python build time flags. WebAssembly, Emscripten, and WASI | 
|  | are evolving standards; some features like networking may be | 
|  | supported in the future. | 
|  |  | 
|  | For Python in the browser, users should consider `Pyodide`_ or `PyScript`_. | 
|  | PyScript is built on top of Pyodide, which itself is built on top of | 
|  | CPython and Emscripten. Pyodide provides access to browsers' JavaScript and | 
|  | DOM APIs as well as limited networking capabilities with JavaScript's | 
|  | ``XMLHttpRequest`` and ``Fetch`` APIs. | 
|  |  | 
|  | * Process-related APIs are not available or always fail with an error. That | 
|  | includes APIs that spawn new processes (:func:`~os.fork`, | 
|  | :func:`~os.execve`), wait for processes (:func:`~os.waitpid`), send signals | 
|  | (:func:`~os.kill`), or otherwise interact with processes. The | 
|  | :mod:`subprocess` is importable but does not work. | 
|  |  | 
|  | * The :mod:`socket` module is available, but is limited and behaves | 
|  | differently from other platforms. On Emscripten, sockets are always | 
|  | non-blocking and require additional JavaScript code and helpers on the | 
|  | server to proxy TCP through WebSockets; see `Emscripten Networking`_ | 
|  | for more information. WASI snapshot preview 1 only permits sockets from an | 
|  | existing file descriptor. | 
|  |  | 
|  | * Some functions are stubs that either don't do anything and always return | 
|  | hardcoded values. | 
|  |  | 
|  | * Functions related to file descriptors, file permissions, file ownership, and | 
|  | links are limited and don't support some operations. For example, WASI does | 
|  | not permit symlinks with absolute file names. | 
|  |  | 
|  | .. _WebAssembly: https://webassembly.org/ | 
|  | .. _Emscripten: https://emscripten.org/ | 
|  | .. _Emscripten Networking: https://emscripten.org/docs/porting/networking.html | 
|  | .. _WASI: https://wasi.dev/ | 
|  | .. _wasmtime: https://wasmtime.dev/ | 
|  | .. _Pyodide: https://pyodide.org/ | 
|  | .. _PyScript: https://pyscript.net/ |