JavaScript API#
Top Level Exports#
These can be imported via import { name } from "pyodide.mjs";. If you can’t
use the es6 module, pyodide.js places loadPyodide() on
globalThis. The other top level exports cannot be accessed from
pyodide.js.
Type Aliases:
The return type of |
Interfaces:
The configuration options for loading Pyodide. |
Attributes:
The Pyodide version. |
Functions:
async |
Load the main Pyodide wasm module and initialize it. |
- PyodideAPI#
The return type of
loadPyodide(). See the pyodide api docs for more information.
- interface PyodideConfig#
The configuration options for loading Pyodide.
- PyodideConfig.args?#
type:
string[]Command line arguments to pass to Python on startup. See Python command line interface options for more details. Default:
[]
- PyodideConfig.checkAPIVersion?#
type:
booleanIf true (default), throw an error if the version of Pyodide core does not match the version of the Pyodide js package.
- PyodideConfig.convertNullToNone?#
Note
Deprecated.
type:
booleanOpt into the old behavior where JavaScript
nullis converted toNoneinstead ofjsnull. Deprecated.
- PyodideConfig.enableRunUntilComplete?#
type:
booleanMake loop.run_until_complete() function correctly using stack switching. Default:
true.
- PyodideConfig.env?#
type: { [key:
string]:string; }Environment variables to pass to Python. This can be accessed inside of Python at runtime via
os.environ. Certain environment variables change the way that Python loads: https://docs.python.org/3.10/using/cmdline.html#environment-variables Default:{}. Ifenv.HOMEis undefined, it will be set to a default value of"/home/pyodide"
- PyodideConfig.fullStdLib?#
type:
booleanLoad the full Python standard library. Setting this to false excludes unvendored modules from the standard library. Default:
false
- PyodideConfig.indexURL?#
type:
stringThe URL from which Pyodide will load the main Pyodide runtime and packages. It is recommended that you leave this unchanged, providing an incorrect value can cause broken behavior.
Default: The url that Pyodide is loaded from with the file name (
pyodide.jsorpyodide.mjs) removed.
- PyodideConfig.jsglobals?#
type:
objectThe object that Pyodide will use for the
jsmodule. Default:globalThis
- PyodideConfig.lockFileContents?#
type:
string|Lockfile|Promise<string|Lockfile>The contents of a lockfile. If a string, it should be valid json and
JSON.parse()should return aLockfileinstance. SeeLockfilefor the schema.
- PyodideConfig.lockFileURL?#
type:
stringThe URL from which Pyodide will load the Pyodide
pyodide-lock.jsonlock file. You can produce custom lock files withmicropip.freeze(). Default:`${indexURL}/pyodide-lock.json`
- PyodideConfig.packageBaseUrl?#
type:
stringThe base url relative to which a relative value of
file_nameis interpreted. IflockfileContentsis provided, thenlockFileContentsmust be provided explicitly in order to install packages with relative paths.Otherwise, the default is calculated as follows:
If
lockFileURLcontains a/, the default is everything before the last/inlockFileURL.If in the browser, the default is
location.toString().Otherwise, the default is
'.'.
- PyodideConfig.packageCacheDir?#
type:
stringThe file path where packages will be cached in node. If a package exists in
packageCacheDirit is loaded from there, otherwise it is downloaded from the JsDelivr CDN and then cached intopackageCacheDir. Only applies when running in node; ignored in browsers.Default: same as indexURL
- PyodideConfig.packages?#
type:
string[]A list of packages to load as Pyodide is initializing.
This is the same as loading the packages with
pyodide.loadPackage()after Pyodide is loaded except using thepackagesoption is more efficient because the packages are downloaded while Pyodide bootstraps itself.
- PyodideConfig.pyproxyToStringRepr?#
Note
Deprecated.
type:
booleanOpt into the old behavior where
PyProxy.toString()callsrepr()and notstr(). Deprecated.
- PyodideConfig.stdLibURL?#
type:
stringThe URL from which to load the standard library
python_stdlib.zipfile. This URL includes the most of the Python standard library. Some stdlib modules were unvendored, and can be loaded separately withfullStdLib: trueoption or by their package name. Default:`${indexURL}/python_stdlib.zip`
- PyodideConfig.toJsLiteralMap?#
Note
Deprecated.
type:
booleanOpt into the old behavior where Python dictionaries are converted to LiteralMap instead of Object.
- async PyodideConfig.fsInit?(FS, info)#
This is a hook that allows modification of the file system before the main() function is called and the intereter is started. When this is called, it is guaranteed that there is an empty site-packages directory.
- Arguments:
FS (typeof
FS& :js:None:`PyodideFSType`)info ({ sitePackages:
string; })
- Returns:
- PyodideConfig.stderr?(msg)#
Override the standard error output callback. The
pyodide.setStderr()function is more flexible and should be preferred in most cases, but depending on theargspassed toloadPyodide, Pyodide may write to stdout on startup, which can only be controlled by passing a customstdoutfunction.- Arguments:
msg (
string)
- PyodideConfig.stdin?()#
Override the standard input callback. Should ask the user for one line of input. The
pyodide.setStdin()function is more flexible and should be preferred.
- PyodideConfig.stdout?(msg)#
Override the standard output callback. The
pyodide.setStdout()function is more flexible and should be preferred in most cases, but depending on theargspassed toloadPyodide, Pyodide may write to stdout on startup, which can only be controlled by passing a customstdoutfunction.- Arguments:
msg (
string)
- version#
type:
stringThe Pyodide version.
The version here is a Python version, following PEP 440. This is different from the version in
package.jsonwhich follows the node package manager version convention.
- async loadPyodide(options={})#
Load the main Pyodide wasm module and initialize it.
- Arguments:
options (
PyodideConfig)
- Returns:
Promise<PyodideAPI> – The pyodide module.
Example
async function main() { const pyodide = await loadPyodide({ fullStdLib: true, stdout: (msg) => console.log(`Pyodide: ${msg}`), }); console.log("Loaded Pyodide"); } main();
pyodide#
This section documents the pyodide API object, which is returned by
loadPyodide().
Interfaces:
The type of a package lockfile. |
|
The lockfile platform info. |
|
A package entry in the lock file. |
|
Attributes:
A map from posix error names to error codes. |
|
An alias to the Emscripten File System API. |
|
An alias to the Emscripten Path API. |
|
APIs to set a canvas for rendering graphics. |
|
Foreign function interface classes. |
|
An alias to the global Python namespace. |
|
An object whose keys are the names of the loaded packages and whose values are the install sources of the packages. |
|
Returns the pyodide lockfile used to load the current Pyodide instance. |
|
Returns the URL or path with respect to which relative paths in the lock file are resolved, or undefined. |
|
An alias to the Python pyodide package. |
|
The Pyodide version. |
Functions:
Throws a |
|
async |
Load packages from the Pyodide distribution or Python wheels by URL. |
async |
Inspect a Python code chunk and use |
async |
Mounts a |
|
Mounts a host directory into Pyodide file system. |
|
Imports a module and returns it. |
|
Tell Pyodide about Comlink. |
|
Registers the JavaScript object |
|
Runs a string of Python code from JavaScript, using |
async |
Run a Python code string with top level await using
|
|
Turn on or off debug mode. |
|
Sets the interrupt buffer to be |
|
Sets the standard error handler. |
|
Set a stdin handler. |
|
Sets the standard out handler. |
|
Convert a JavaScript object to a Python object as best as possible. |
|
Unpack an archive into a target directory. |
|
Unregisters a JavaScript module with given name that has been previously
registered with |
- interface Lockfile#
The type of a package lockfile.
- Lockfile.info#
type:
LockfileInfo
- Lockfile.packages#
type:
Record<string,LockfilePackage>
- interface LockfileInfo#
The lockfile platform info. The
abi_versionfield is used to check if the lockfile is compatible with the interpreter. The remaining fields are informational.- LockfileInfo.abi_version#
type:
stringThe ABI version is structured as
yyyy_patch. For the lockfile to be compatible with the current interpreter this field must match exactly with the ABI version of the interpreter.
- LockfileInfo.arch#
type: “wasm32”
Machine architecture. At present, only can be wasm32. Pyodide has no wasm64 build.
- LockfileInfo.platform#
type:
stringThe Emscripten versions for instance,
emscripten_4_0_9. Different Emscripten versions have different ABIs so if this changesabi_versionmust also change.
- interface LockfilePackage#
A package entry in the lock file.
- LockfilePackage.file_name#
type:
stringThe file name or url of the package wheel. If it’s relative, it will be resolved with respect to
packageBaseUrl. If there is nopackageBaseUrl, attempting to install a package with a relativefile_namewill fail.
- LockfilePackage.imports#
type:
string[]The set of imports provided by this package as best we can tell. Used by
pyodide.loadPackagesFromImports()to work out what packages to install.
- LockfilePackage.install_dir#
type: “site” | “dynlib”
The installation directory. Will be
siteexcept for certain system dynamic libraries that need to go on the global LD_LIBRARY_PATH.
- LockfilePackage.package_type#
type: “package” | “cpython_module” | “shared_library” | “static_library”
- interface PackageData#
-
- PackageData.packageType#
type: “package” | “cpython_module” | “shared_library” | “static_library”
- pyodide.FS#
type: typeof
FS& :js:None:`PyodideFSType`An alias to the Emscripten File System API.
This provides a wide range of POSIX-like file/device operations, including mount which can be used to extend the in-memory filesystem with features like persistence.
While all the file systems implementations are enabled, only the default
MEMFSis guaranteed to work in all runtime settings. The implementations are available as members ofFS.filesystems:IDBFS,NODEFS,PROXYFS,WORKERFS.
- pyodide.PATH#
type:
anyAn alias to the Emscripten Path API.
This provides a variety of operations for working with file system paths, such as
dirname,normalize, andsplitPath.
- pyodide.globals#
type:
PyProxyAn alias to the global Python namespace.
For example, to access a variable called
fooin the Python global scope, usepyodide.globals.get("foo")
- pyodide.loadedPackages#
-
An object whose keys are the names of the loaded packages and whose values are the install sources of the packages. Use Object.keys(pyodide.loadedPackages) to get the list of names of loaded packages, and
pyodide.loadedPackages[package_name]to access the install source for a particularpackage_name.
- pyodide.lockfile#
type: readonly
LockfileReturns the pyodide lockfile used to load the current Pyodide instance. The format of the lockfile is defined in the pyodide/pyodide-lock repository.
- pyodide.lockfileBaseUrl#
type: readonly
undefined|stringReturns the URL or path with respect to which relative paths in the lock file are resolved, or undefined.
- pyodide.pyodide_py#
type:
PyProxyAn alias to the Python pyodide package.
You can use this to call functions defined in the Pyodide Python package from JavaScript.
- pyodide.version#
type:
stringThe Pyodide version.
The version here is a Python version, following PEP 440. This is different from the version in
package.jsonwhich follows the node package manager version convention.
- pyodide.checkInterrupt()#
Throws a
KeyboardInterrupterror if aKeyboardInterrupthas been requested via the interrupt buffer.This can be used to enable keyboard interrupts during execution of JavaScript code, just as
PyErr_CheckSignals()is used to enable keyboard interrupts during execution of C code.
- async pyodide.loadPackage(names, options)#
Load packages from the Pyodide distribution or Python wheels by URL.
This installs packages in the virtual filesystem. Packages needs to be imported from Python before it can be used.
This function can only install packages included in the Pyodide distribution, or Python wheels by URL, without dependency resolution. It is significantly more limited in terms of functionality as compared to
micropip, however it has less overhead and can be faster.When installing binary wheels by URLs it is user’s responsibility to check that the installed binary wheel is compatible in terms of Python and Emscripten versions. Compatibility is not checked during installation time (unlike with micropip). If a wheel for the wrong Python/Emscripten version is installed it would fail at import time.
- Arguments:
names (
string|string[] |PyProxy) – Either a single package name or URL or a list of them. URLs can be absolute or relative. The URLs must correspond to Python wheels: either pure Python wheels, with a file name ending withnone-any.whlor Emscripten/WASM 32 wheels, with a file name ending withcp<pyversion>_emscripten_<em_version>_wasm32.whl. The argument can be aPyProxyof a list, in which case the list will be converted to JavaScript and thePyProxywill be destroyed.options.messageCallback ((message:
string) =>void) – A callback, called with progress messages (optional)options.errorCallback ((message:
string) =>void) – A callback, called with error/warning messages (optional)options.checkIntegrity (
boolean) – If true, check the integrity of the downloaded packages (default: true)
- Returns:
Promise<PackageData[]> – The loaded package data.
- async pyodide.loadPackagesFromImports(code, options)#
Inspect a Python code chunk and use
pyodide.loadPackage()to install any known packages that the code chunk imports. Uses the Python APIpyodide.code.find_imports()to inspect the code.For example, given the following code as input
import numpy as np x = np.array([1, 2, 3])
loadPackagesFromImports()will callpyodide.loadPackage(['numpy']).- Arguments:
code (
string) – The code to inspect.options.messageCallback ((message:
string) =>void) – A callback, called with progress messages (optional)options.errorCallback ((message:
string) =>void) – A callback, called with error/warning messages (optional)options.checkIntegrity (
boolean) – If true, check the integrity of the downloaded packages (default: true)
- Returns:
- async pyodide.mountNativeFS(path, fileSystemHandle)#
Mounts a
FileSystemDirectoryHandleinto the target directory. Currently it’s only possible to acquire aFileSystemDirectoryHandlein Chrome.- Arguments:
path (
string) – The absolute path in the Emscripten file system to mount the native directory. If the directory does not exist, it will be created. If it does exist, it must be empty.fileSystemHandle (
FileSystemDirectoryHandle) – A handle returned bynavigator.storage.getDirectory()orwindow.showDirectoryPicker().
- Returns:
- pyodide.mountNodeFS(emscriptenPath, hostPath)#
Mounts a host directory into Pyodide file system. Only works in node.
- pyodide.pyimport(mod_name)#
Imports a module and returns it.
If
namehas no dot in it, thenpyimport(name)is approximately equivalent to:pyodide.runPython(`import ${name}; ${name}`)
except that
nameis not introduced into the Python global namespace. If the name has one or more dots in it, say it is of the formpath.namewherenamehas no dots but path may have zero or more dots. Then it is approximately the same as:pyodide.runPython(`from ${path} import ${name}; ${name}`);
Example
pyodide.pyimport("math.comb")(4, 2) // returns 4 choose 2 = 6
- pyodide.registerComlink(Comlink)#
Tell Pyodide about Comlink. Necessary to enable importing Comlink proxies into Python.
- Arguments:
Comlink (
any)
- pyodide.registerJsModule(name, module)#
Registers the JavaScript object
moduleas a JavaScript module namedname. This module can then be imported from Python using the standard Python import system. If another module by the same name has already been imported, this won’t have much effect unless you also delete the imported module fromsys.modules. This callsregister_js_module().Any attributes of the JavaScript objects which are themselves objects will be treated as submodules:
pyodide.registerJsModule("mymodule", { submodule: { value: 7 } }); pyodide.runPython(` from mymodule.submodule import value assert value == 7 `);
If you wish to prevent this, try the following instead:
const sys = pyodide.pyimport("sys"); sys.modules.set("mymodule", { obj: { value: 7 } }); pyodide.runPython(` from mymodule import obj assert obj.value == 7 # attempting to treat obj as a submodule raises ModuleNotFoundError: # "No module named 'mymodule.obj'; 'mymodule' is not a package" from mymodule.obj import value `);
- pyodide.runPython(code, options)#
Runs a string of Python code from JavaScript, using
eval_code()to evaluate the code. If the last statement in the Python code is an expression (and the code doesn’t end with a semicolon), the value of the expression is returned.- Arguments:
code (
string) – The Python code to runoptions.globals (
PyProxy) – An optional Python dictionary to use as the globals. Defaults topyodide.globals.options.locals (
PyProxy) – An optional Python dictionary to use as the locals. Defaults to the same asglobals.options.filename (
string) – An optional string to use as the file name. Defaults to"<exec>". If a custom file name is given, the traceback for any exception that is thrown will show source lines (unless the given file name starts with<and ends with>).
- Returns:
any– The result of the Python code translated to JavaScript. See the documentation foreval_code()for more info.
Example
async function main(){ const pyodide = await loadPyodide(); console.log(pyodide.runPython("1 + 2")); // 3 const globals = pyodide.toPy({ x: 3 }); console.log(pyodide.runPython("x + 1", { globals })); // 4 const locals = pyodide.toPy({ arr: [1, 2, 3] }); console.log(pyodide.runPython("sum(arr)", { locals })); // 6 } main();
- async pyodide.runPythonAsync(code, options)#
Run a Python code string with top level await using
eval_code_async()to evaluate the code. Returns a promise which resolves when execution completes. If the last statement in the Python code is an expression (and the code doesn’t end with a semicolon), the returned promise will resolve to the value of this expression.For example:
let result = await pyodide.runPythonAsync(` from js import fetch response = await fetch("./pyodide-lock.json") packages = await response.json() # If final statement is an expression, its value is returned to JavaScript len(packages.packages.object_keys()) `); console.log(result); // 79
Python imports
Since pyodide 0.18.0, you must call
loadPackagesFromImports()to import any python packages referenced viaimportstatements in your code. This function will no longer do it for you.- Arguments:
code (
string) – The Python code to runoptions.globals (
PyProxy) – An optional Python dictionary to use as the globals. Defaults topyodide.globals.options.locals (
PyProxy) – An optional Python dictionary to use as the locals. Defaults to the same asglobals.options.filename (
string) – An optional string to use as the file name. Defaults to"<exec>". If a custom file name is given, the traceback for any exception that is thrown will show source lines (unless the given file name starts with<and ends with>).
- Returns:
Promise<any> – The result of the Python code translated to JavaScript.
- pyodide.setDebug(debug)#
Turn on or off debug mode. In debug mode, some error messages are improved at a performance cost.
- pyodide.setInterruptBuffer(interrupt_buffer)#
Sets the interrupt buffer to be
interrupt_buffer. This is only useful when Pyodide is used in a webworker. The buffer should be aSharedArrayBuffershared with the main browser thread (or another worker). In that case, signalsignummay be sent by writingsignuminto the interrupt buffer. Ifsignumdoes not satisfy 0 <signum< 65 it will be silently ignored.You can disable interrupts by calling
setInterruptBuffer(undefined).If you wish to trigger a
KeyboardInterrupt, writeSIGINT(a 2) into the interrupt buffer.By default
SIGINTraises aKeyboardInterruptand all other signals are ignored. You can install custom signal handlers with the signal module. Even signals that normally have special meaning and can’t be overridden likeSIGKILLandSIGSEGVare ignored by default and can be used for any purpose you like.- Arguments:
interrupt_buffer (
TypedArray)
- pyodide.setStderr(options)#
Sets the standard error handler. See the documentation for
pyodide.setStdout().
- pyodide.setStdin(options)#
Set a stdin handler. See redirecting standard streams for a more detailed explanation. There are two different possible interfaces to implement a handler. It’s also possible to select either the default handler or an error handler that always returns an IO error.
passing a
readfunction (see below),passing a
stdinfunction (see below),passing
error: trueindicates that attempting to read from stdin should always raise an IO error.passing none of these sets the default behavior. In node, the default is to read from stdin. In the browser, the default is to raise an error.
The functions on the
optionsargument will be called withoptionsbound tothisso passing an instance of a class as theoptionsobject works as expected.The interfaces that the handlers implement are as follows:
The
readfunction is called with aUint8Arrayargument. The function should place the utf8-encoded input into this buffer and return the number of bytes written. For instance, if the buffer was completely filled with input, then returnbuffer.length. If areadfunction is passed you may optionally also pass anfsyncfunction which is called when stdin is flushed.The
stdinfunction is called with zero arguments. It should return one of:a number
a string
an
ArrayBufferorTypedArraywithBYTES_PER_ELEMENTequal to 1. The buffer should contain utf8 encoded text.
If a number is returned, it is interpreted as a single character code. The number should be between 0 and 255.
If a string is returned, it is encoded into a buffer using
TextEncoder. By default, an EOF is appended after each string or buffer returned. If this behavior is not desired, passautoEOF: false.
- Arguments:
options.stdin (() =>
null|undefined|string|ArrayBuffer|Uint8Array|number) – A stdin handleroptions.read ((buffer:
Uint8Array) =>number) – A read handleroptions.error (
boolean) – If this is set totrue, attempts to read from stdin will always set an IO error.options.isatty (
boolean) – Shouldisatty(stdin)betrueorfalse(defaultfalse).options.autoEOF (
boolean) – Insert an EOF automatically after each string or buffer? (defaulttrue). This option can only be used with the stdin handler.
- pyodide.setStdout(options)#
Sets the standard out handler. A batched handler, a raw handler, or a write function can be provided. If no handler is provided, we restore the default handler.
The functions on the
optionsargument will be called withoptionsbound tothisso passing an instance of a class as theoptionsobject works as expected.- Arguments:
options.batched ((output:
string) =>void) – A batched handler is called with a string whenever a newline character is written or stdout is flushed. In the former case, the received line will end with a newline, in the latter case it will not.options.raw ((charCode:
number) =>void) – A raw handler is called with the handler is called with a number for each byte of the output to stdout.options.write ((buffer:
Uint8Array) =>number) – A write handler is called with a buffer that contains the utf8 encoded binary dataoptions.isatty (
boolean) – Shouldisatty(stdout)returntrueorfalse. Must befalseif a batched handler is used. (defaultfalse).
Example
async function main(){ const pyodide = await loadPyodide(); pyodide.setStdout({ batched: (msg) => console.log(msg) }); pyodide.runPython("print('ABC')"); // 'ABC' pyodide.setStdout({ raw: (byte) => console.log(byte) }); pyodide.runPython("print('ABC')"); // 65 // 66 // 67 // 10 (the ascii values for 'ABC' including a new line character) } main();
- pyodide.toPy(obj, options)#
Convert a JavaScript object to a Python object as best as possible.
This is similar to
to_py()but for use from JavaScript. If the object is immutable or aPyProxy, it will be returned unchanged. If the object cannot be converted into Python, it will be returned unchanged.See JavaScript to Python for more information.
- Arguments:
obj (
any) – The object to convert.options.depth (
number) – Optional argument to limit the depth of the conversion.options.defaultConverter ((value:
any, converter: (value:any) =>any, cacheConversion: (input:any, output:any) =>void) =>any) – Optional argument to convert objects with no default conversion. See the documentation ofto_py().
- Returns:
any– The object converted to Python.
- pyodide.unpackArchive(buffer, format, options)#
Unpack an archive into a target directory.
- Arguments:
buffer (
ArrayBuffer|TypedArray) – The archive as anArrayBufferorTypedArray.format (
string) – The format of the archive. Should be one of the formats recognized byshutil.unpack_archive(). By default the options are'bztar','gztar','tar','zip', and'wheel'. Several synonyms are accepted for each format, e.g., for'gztar'any of'.gztar','.tar.gz','.tgz','tar.gz'or'tgz'are considered to be synonyms.options.extractDir (
string) – The directory to unpack the archive into. Defaults to the working directory.
- pyodide.unregisterJsModule(name)#
Unregisters a JavaScript module with given name that has been previously registered with
pyodide.registerJsModule()orregister_js_module(). If a JavaScript module with that name does not already exist, will throw an error. Note that if the module has already been imported, this won’t have much effect unless you also delete the imported module fromsys.modules. This callsunregister_js_module().- Arguments:
name (
string) – Name of the JavaScript module to remove
pyodide.ffi#
Foreign function interface classes. Can be used for typescript type annotations
or at runtime for instanceof checks.
To import types from pyodide.ffi you can use for example
import type { PyProxy } from "pyodide/ffi";
If you want to do an instance check, you’ll need to access the type via the
Pyodide API returned from loadPyodide():
const pyodide = loadPyodide();
const result = pyodide.runPython("... code here");
if (result instanceof pyodide.ffi.PyProxy) {
// Do something
}
Type Aliases:
Classes:
A |
|
A |
|
A |
|
A |
|
A |
|
A class to allow access to Python data buffers from JavaScript. |
|
A |
|
A |
|
A |
|
A |
|
A |
|
A |
|
A |
|
A |
|
A |
|
A |
|
A |
|
A JavaScript error caused by a Python exception. |
- TypedArray#
type:
Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Uint8ClampedArray|Float32Array|Float64Array
- class pyodide.ffi.PyAsyncGenerator()#
A
PyProxywhose proxied Python object is an asynchronous generator (i.e., it is an instance ofAsyncGenerator)- Extends:
- async PyAsyncGenerator.return(v)#
Throws a
GeneratorExitinto the generator and if theGeneratorExitis not caught returns the argument value{done: true, value: v}. If the generator catches theGeneratorExitand returns or yields another value the next value of the generator this is returned in the normal way. If it throws some error other thanGeneratorExitorStopAsyncIteration, that error is propagated. See the documentation forAsyncGenerator.throw()- Arguments:
v (
any) – The value to return from the generator.
- Returns:
Promise<IteratorResult<any,any>> – An Object with two properties:doneandvalue. When the generator yieldssome_value,returnreturns{done : false, value : some_value}. When the generator raises aStopAsyncIterationexception,returnreturns{done : true, value : result_value}.
- async PyAsyncGenerator.throw(exc)#
Throws an exception into the Generator.
See the documentation for
AsyncGenerator.throw().- Arguments:
exc (
any) – Error The error to throw into the generator. Must be an instanceofError.
- Returns:
Promise<IteratorResult<any,any>> – An Object with two properties:doneandvalue. When the generator yieldssome_value,returnreturns{done : false, value : some_value}. When the generator raises aStopIteration(result_value)exception,returnreturns{done : true, value : result_value}.
- class pyodide.ffi.PyAsyncIterable()#
A
PyProxywhose proxied Python object is asynchronous iterable (i.e., has an__aiter__()method).- Extends:
- PyAsyncIterable.[Symbol․asyncIterator]()#
This translates to the Python code
aiter(obj). Return an async iterator associated to the proxy. See the documentation forSymbol.asyncIterator.This will be used implicitly by
for(await let x of proxy){}.- Returns:
- class pyodide.ffi.PyAsyncIterator()#
A
PyProxywhose proxied Python object is an asynchronous iterator- Extends:
- async PyAsyncIterator.next(arg=undefined)#
This translates to the Python code
anext(obj). Returns the next value of the asynchronous iterator. The argument will be sent to the Python iterator (if it’s a generator for instance).This will be used implicitly by
for(let x of proxy){}.- Arguments:
arg (
any) – The value to send to a generator. The value will be assigned as a result of a yield expression.
- Returns:
Promise<IteratorResult<any,any>> – An Object with two properties:doneandvalue. When the iterator yieldssome_value,nextreturns{done : false, value : some_value}. When the giterator is done,nextreturns{done : true }.
- class pyodide.ffi.PyAwaitable()#
A
PyProxywhose proxied Python object is awaitable (i.e., has an__await__()method).- async PyAwaitable.catch<TResult>(onrejected)#
Attaches a callback for only the rejection of the Promise.
- Type parameters:
TResult –
- Arguments:
onrejected (
null| (reason:any) => TResult |PromiseLike<TResult>) – The callback to execute when the Promise is rejected.
- Returns:
Promise<any> – A Promise for the completion of the callback.
- async PyAwaitable.finally(onfinally)#
Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The resolved value cannot be modified from the callback.
- async PyAwaitable.then<TResult1, TResult2>(onfulfilled, onrejected)#
Attaches callbacks for the resolution and/or rejection of the Promise.
- Type parameters:
TResult1 –
TResult2 –
- Arguments:
onfulfilled (
null| (value:any) => TResult1 |PromiseLike<TResult1>) – The callback to execute when the Promise is resolved.onrejected (
null| (reason:any) => TResult2 |PromiseLike<TResult2>) – The callback to execute when the Promise is rejected.
- Returns:
Promise<TResult1 | TResult2> – A Promise for the completion of which ever callback is executed.
- class pyodide.ffi.PyBuffer()#
A
PyProxywhose proxied Python object supports the Python Buffer Protocol.Examples of buffers include {py:class}`bytes` objects and numpy {external+numpy:ref}`arrays`.
- Extends:
- PyBuffer.getBuffer(type)#
Get a view of the buffer data which is usable from JavaScript. No copy is ever performed.
We do not support suboffsets, if the buffer requires suboffsets we will throw an error. JavaScript nd array libraries can’t handle suboffsets anyways. In this case, you should use the
toJs()api or copy the buffer to one that doesn’t use suboffsets (using e.g.,numpy.ascontiguousarray()).If the buffer stores big endian data or half floats, this function will fail without an explicit type argument. For big endian data you can use
toJs().DataViewhas support for big endian data, so you might want to pass'dataview'as the type argument in that case.- Arguments:
type (
string) – The type of thedatafield in the output. Should be one of:"i8","u8","u8clamped","i16","u16","i32","u32","i32","u32","i64","u64","f32","f64", or"dataview". This argument is optional, if absentgetBuffer()will try to determine the appropriate output type based on the buffer format string (see Format Strings).
- Returns:
- class pyodide.ffi.PyBufferView()#
A class to allow access to Python data buffers from JavaScript. These are produced by
getBuffer()and cannot be constructed directly. When you are done, release it with therelease()method. See the Python Buffer Protocol documentation for more information.To find the element
x[a_1, ..., a_n], you could use the following code:function multiIndexToIndex(pybuff, multiIndex) { if (multindex.length !== pybuff.ndim) { throw new Error("Wrong length index"); } let idx = pybuff.offset; for (let i = 0; i < pybuff.ndim; i++) { if (multiIndex[i] < 0) { multiIndex[i] = pybuff.shape[i] - multiIndex[i]; } if (multiIndex[i] < 0 || multiIndex[i] >= pybuff.shape[i]) { throw new Error("Index out of range"); } idx += multiIndex[i] * pybuff.stride[i]; } return idx; } console.log("entry is", pybuff.data[multiIndexToIndex(pybuff, [2, 0, -1])]);
Converting between TypedArray types
The following naive code to change the type of a typed array does not work:
// Incorrectly convert a TypedArray. // Produces a Uint16Array that points to the entire WASM memory! let myarray = new Uint16Array(buffer.data.buffer);
Instead, if you want to convert the output TypedArray, you need to say:
// Correctly convert a TypedArray. let myarray = new Uint16Array( buffer.data.buffer, buffer.data.byteOffset, buffer.data.byteLength );
- PyBufferView.c_contiguous#
type:
booleanIs it C contiguous? See
memoryview.c_contiguous.
- PyBufferView.data#
type:
TypedArrayThe actual data. A typed array of an appropriate size backed by a segment of the WASM memory.
The
typeargument ofgetBuffer()determines which sort ofTypedArrayorDataViewto return. By defaultgetBuffer()will look at the format string to determine the most appropriate option. Most often the result is aUint8Array.Contiguity
If the buffer is not contiguous, the
readonlyTypedArray will contain data that is not part of the buffer. Modifying this data leads to undefined behavior.Read only buffers
If
buffer.readonlyistrue, you should not modify the buffer. Modifying a read only buffer leads to undefined behavior.
- PyBufferView.f_contiguous#
type:
booleanIs it Fortran contiguous? See
memoryview.f_contiguous.
- PyBufferView.format#
type:
stringThe format string for the buffer. See Format Strings and
memoryview.format.
- PyBufferView.itemsize#
type:
numberHow large is each entry in bytes? See
memoryview.itemsize.
- PyBufferView.nbytes#
type:
numberThe total number of bytes the buffer takes up. This is equal to
buff.data.byteLength. Seememoryview.nbytes.
- PyBufferView.ndim#
type:
numberThe number of dimensions of the buffer. If
ndimis 0, the buffer represents a single scalar or struct. Otherwise, it represents an array. Seememoryview.ndim.
- PyBufferView.offset#
type:
numberThe offset of the first entry of the array. For instance if our array is 3d, then you will find
array[0,0,0]atpybuf.data[pybuf.offset]
- PyBufferView.readonly#
type:
booleanIf the data is read only, you should not modify it. There is no way for us to enforce this, but it may cause very weird behavior. See
memoryview.readonly.
- PyBufferView.shape#
type:
number[]The shape of the buffer, that is how long it is in each dimension. The length will be equal to
ndim. For instance, a 2x3x4 array would have shape[2, 3, 4]. Seememoryview.shape.
- PyBufferView.strides#
type:
number[]An array of of length
ndimgiving the number of elements to skip to get to a new element in each dimension. See the example definition of amultiIndexToIndexfunction above. Seememoryview.strides.
- PyBufferView.release()#
Release the buffer. This allows the memory to be reclaimed.
- class pyodide.ffi.PyCallable()#
A
PyProxywhose proxied Python object is callable (i.e., has an__call__()method).- Extends:
- PyCallable.apply(thisArg, jsargs)#
The
apply()method calls the specified function with a given this value, and arguments provided as an array (or an array-like object). LikeFunction.apply().- Arguments:
thisArg (
any) – Thethisargument. Has no effect unless thePyCallablehascaptureThis()set. IfcaptureThis()is set, it will be passed as the first argument to the Python function.jsargs (
any) – The array of arguments
- Returns:
any– The result from the function call.
- PyCallable.bind(thisArg, ...jsargs)#
The
bind()method creates a new function that, when called, has itsthiskeyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called. SeeFunction.bind().If the
PyCallabledoes not havecaptureThis()set, thethisparameter will be discarded. If it does havecaptureThis()set,thisArgwill be set to the first argument of the Python function. The returned proxy and the original proxy have the same lifetime so destroying either destroys both.
- PyCallable.call(thisArg, ...jsargs)#
Calls the function with a given this value and arguments provided individually. See
Function.call().- Arguments:
thisArg (
any) – Thethisargument. Has no effect unless thePyCallablehascaptureThis()set. IfcaptureThis()is set, it will be passed as the first argument to the Python function.jsargs (
any) – The arguments
- Returns:
any– The result from the function call.
- PyCallable.callKwargs(...jsargs)#
Call the function with keyword arguments. The last argument must be an object with the keyword arguments.
- PyCallable.callKwargsRelaxed(...jsargs)#
Call the function with keyword arguments in a “relaxed” manner. The last argument must be an object with the keyword arguments. Any extra arguments will be ignored. This matches the behavior of JavaScript functions more accurately.
Missing arguments are NOT filled with
None. If too few arguments are passed, this will still raise aTypeError. Also, if the same argument is passed as both a keyword argument and a positional argument, it will raise an error.This uses
pyodide.code.relaxed_call().
- async PyCallable.callPromising(...jsargs)#
Call the function with stack switching enabled. The last argument must be an object with the keyword arguments. Functions called this way can use
run_sync()to block until anAwaitableis resolved. Only works in runtimes with JS Promise integration.Experimental
This feature is not yet stable.
- async PyCallable.callPromisingKwargs(...jsargs)#
Call the function with stack switching enabled. The last argument must be an object with the keyword arguments. Functions called this way can use
run_sync()to block until anAwaitableis resolved. Only works in runtimes with JS Promise integration.Experimental
This feature is not yet stable.
- PyCallable.callRelaxed(...jsargs)#
Call the function in a “relaxed” manner. Any extra arguments will be ignored. This matches the behavior of JavaScript functions more accurately.
Any extra arguments will be ignored. This matches the behavior of JavaScript functions more accurately. Missing arguments are NOT filled with
None. If too few arguments are passed, this will still raise a TypeError.This uses
pyodide.code.relaxed_call().
- PyCallable.callWithOptions(options, ...jsargs)#
Call the Python function. The first parameter controls various parameters that change the way the call is performed.
- Arguments:
options.relaxed (
boolean) – If true, extra arguments are ignored instead of raising aTypeError.options.kwargs (
boolean) – If true, the last argument is treated as a collection of keyword arguments.options.promising (
boolean) – If true, the call is made with stack switching enabled. Not needed if the callee is an async Python function.jsargs (
any) – Arguments to the Python function.
- Returns:
- PyCallable.captureThis()#
Returns a
PyProxythat passesthisas the first argument to the Python function. The returnedPyProxyhas the internalcaptureThisproperty set.It can then be used as a method on a JavaScript object. The returned proxy and the original proxy have the same lifetime so destroying either destroys both.
For example:
let obj = { a : 7 }; pyodide.runPython(` def f(self): return self.a `); // Without captureThis, it doesn't work to use f as a method for obj: obj.f = pyodide.globals.get("f"); obj.f(); // raises "TypeError: f() missing 1 required positional argument: 'self'" // With captureThis, it works fine: obj.f = pyodide.globals.get("f").captureThis(); obj.f(); // returns 7
- class pyodide.ffi.PyDict()#
- class pyodide.ffi.PyGenerator()#
A
PyProxywhose proxied Python object is a generator (i.e., it is an instance ofGenerator).- Extends:
- PyGenerator.return(v)#
Throws a
GeneratorExitinto the generator and if theGeneratorExitis not caught returns the argument value{done: true, value: v}. If the generator catches theGeneratorExitand returns or yields another value the next value of the generator this is returned in the normal way. If it throws some error other thanGeneratorExitorStopIteration, that error is propagated. See the documentation forGenerator.return().- Arguments:
v (
any) – The value to return from the generator.
- Returns:
IteratorResult<any,any> – An Object with two properties:doneandvalue. When the generator yieldssome_value,returnreturns{done : false, value : some_value}. When the generator raises aStopIteration(result_value)exception,returnreturns{done : true, value : result_value}.
- PyGenerator.throw(exc)#
Throws an exception into the Generator.
See the documentation for
Generator.throw().- Arguments:
exc (
any) – Error The error to throw into the generator. Must be an instanceofError.
- Returns:
IteratorResult<any,any> – An Object with two properties:doneandvalue. When the generator yieldssome_value,returnreturns{done : false, value : some_value}. When the generator raises aStopIteration(result_value)exception,returnreturns{done : true, value : result_value}.
- class pyodide.ffi.PyIterable()#
A
PyProxywhose proxied Python object is iterable (i.e., it has an__iter__()method).- Extends:
- PyIterable.[Symbol․iterator]()#
This translates to the Python code
iter(obj). Return an iterator associated to the proxy. See the documentation forSymbol.iterator.This will be used implicitly by
for(let x of proxy){}.- Returns:
- class pyodide.ffi.PyIterator()#
A
PyProxywhose proxied Python object is an iterator (i.e., has asend()or__next__()method).- Extends:
- PyIterator.next(arg=undefined)#
This translates to the Python code
next(obj). Returns the next value of the generator. See the documentation forGenerator.next()The argument will be sent to the Python generator.This will be used implicitly by
for(let x of proxy){}.- Arguments:
arg (
any) – The value to send to the generator. The value will be assigned as a result of a yield expression.
- Returns:
IteratorResult<any,any> – An Object with two properties:doneandvalue. When the generator yieldssome_value,nextreturns{done : false, value : some_value}. When the generator raises aStopIterationexception,nextreturns{done : true, value : result_value}.
- class pyodide.ffi.PyMutableSequence()#
A
PyProxywhose proxied Python object is anMutableSequence(i.e., alist)- Extends:
- PyMutableSequence.copyWithin(target, start, end)#
The
Array.copyWithin()method shallow copies part of aPyMutableSequenceto another location in the samePyMutableSequencewithout modifying its length.- Arguments:
- Returns:
any– The modifiedPyMutableSequence.
- PyMutableSequence.fill(value, start, end)#
The
Array.fill()method changes all elements in an array to a static value, from a start index to an end index.
- PyMutableSequence.pop()#
The
Array.pop()method removes the last element from aPyMutableSequence.- Returns:
any– The removed element from thePyMutableSequence; undefined if thePyMutableSequenceis empty.
- PyMutableSequence.push(...elts)#
The
Array.push()method adds the specified elements to the end of aPyMutableSequence.- Arguments:
elts (
any[]) – The element(s) to add to the end of thePyMutableSequence.
- Returns:
any– The new length property of the object upon which the method was called.
- PyMutableSequence.reverse()#
The
Array.reverse()method reverses aPyMutableSequencein place.- Returns:
PyMutableSequence– A reference to the samePyMutableSequence
- PyMutableSequence.shift()#
The
Array.shift()method removes the first element from aPyMutableSequence.- Returns:
any– The removed element from thePyMutableSequence; undefined if thePyMutableSequenceis empty.
- PyMutableSequence.sort(compareFn)#
The
Array.sort()method sorts the elements of aPyMutableSequencein place.- Arguments:
- Returns:
PyMutableSequence– A reference to the samePyMutableSequence
- PyMutableSequence.splice(start, deleteCount, ...items)#
The
Array.splice()method changes the contents of aPyMutableSequenceby removing or replacing existing elements and/or adding new elements in place.- Arguments:
start (
number) – Zero-based index at which to start changing thePyMutableSequence.deleteCount (
number) – An integer indicating the number of elements in thePyMutableSequenceto remove fromstart.items (
any[]) – The elements to add to thePyMutableSequence, beginning fromstart.
- Returns:
any[] – An array containing the deleted elements.
- PyMutableSequence.unshift(...elts)#
The
Array.unshift()method adds the specified elements to the beginning of aPyMutableSequence.- Arguments:
elts (
any[]) – The elements to add to the front of thePyMutableSequence.
- Returns:
any– The new length of thePyMutableSequence.
- class pyodide.ffi.PyProxy()#
A
PyProxyis an object that allows idiomatic use of a Python object from JavaScript. See Proxying from Python into JavaScript.- PyProxy.type#
type: readonly
stringThe name of the type of the object.
Usually the value is
"module.name"but for builtins or interpreter-defined types it is just"name". As pseudocode this is:ty = type(x) if ty.__module__ == 'builtins' or ty.__module__ == "__main__": return ty.__name__ else: ty.__module__ + "." + ty.__name__
- PyProxy.copy()#
Make a new
PyProxypointing to the same Python object. Useful if thePyProxyis destroyed somewhere else.- Returns:
- PyProxy.destroy(options)#
Destroy the
PyProxy. This will release the memory. Any further attempt to use the object will raise an error.In a browser supporting
FinalizationRegistry, Pyodide will automatically destroy thePyProxywhen it is garbage collected, however there is no guarantee that the finalizer will be run in a timely manner so it is better to destroy the proxy explicitly.
- PyProxy.toJs(options)#
Converts the
PyProxyinto a JavaScript object as best as possible. By default does a deep conversion, if a shallow conversion is desired, you can useproxy.toJs({depth : 1}). See Explicit Conversion of PyProxy for more info.- Arguments:
options.depth (
number) – How many layers deep to perform the conversion. Defaults to infiniteoptions.pyproxies (
PyProxy[]) – If provided,toJs()will store all PyProxies created in this list. This allows you to easily destroy all the PyProxies by iterating the list without having to recurse over the generated structure. The most common use case is to create a new empty list, pass the list aspyproxies, and then later iterate overpyproxiesto destroy all of created proxies.options.create_pyproxies (
boolean) – If false,toJs()will throw aConversionErrorrather than producing aPyProxy.options.dict_converter ((array:
Iterable<[key:string, value:any]>) =>any) – A function to be called on an iterable of pairs[key, value]. Convert this iterable of pairs to the desired output. For instance,Object.fromEntries()would convert the dict to an object,Array.from()converts it to anArrayof pairs, and(it) => new Map(it)converts it to aMap(which is the default behavior).options.default_converter ((obj:
PyProxy, convert: (obj:PyProxy) =>any, cacheConversion: (obj:PyProxy, result:any) =>void) =>any) – Optional argument to convert objects with no default conversion. See the documentation ofto_js().options.eager_converter ((obj:
PyProxy, convert: (obj:PyProxy) =>any, cacheConversion: (obj:PyProxy, result:any) =>void) =>any) – Optional callback to convert objects which gets called afterstr,int,float,bool,None, andJsProxyare converted but before any default conversions are applied to standard data structures. Its arguments are the same asdict_converter. See the documentation ofto_js().
- Returns:
any– The JavaScript object resulting from the conversion.
- PyProxy.toString()#
Returns
str(o)(unlesspyproxyToStringRepr: truewas passed toloadPyodide()in which case it will returnrepr(o))- Returns:
- class pyodide.ffi.PyProxyWithGet()#
A
PyProxywhose proxied Python object has a__getitem__()method.- Extends:
- PyProxyWithGet.asJsJson()#
Returns the object treated as a json adaptor.
- With a JsonAdaptor:
property access / modification / deletion is implemented with
__getitem__(),__setitem__(), and__delitem__()respectively.If an attribute is accessed and the result implements
__getitem__()then the result will also be a json adaptor.
For instance,
JSON.stringify(proxy.asJsJson())acts like an inverse to Python’sjson.loads().- Returns:
- class pyodide.ffi.PyProxyWithHas()#
A
PyProxywhose proxied Python object has a__contains__()method.- Extends:
- class pyodide.ffi.PyProxyWithLength()#
A
PyProxywhose proxied Python object has a__len__()method.- Extends:
- class pyodide.ffi.PyProxyWithSet()#
A
PyProxywhose proxied Python object has a__setitem__()or__delitem__()method.- Extends:
- class pyodide.ffi.PySequence()#
A
PyProxywhose proxied Python object is anSequence(i.e., alist)- Extends:
- PySequence.asJsJson()#
Returns the object treated as a json adaptor.
- With a JsonAdaptor:
property access / modification / deletion is implemented with
__getitem__(),__setitem__(), and__delitem__()respectively.If an attribute is accessed and the result implements
__getitem__()then the result will also be a json adaptor.
For instance,
JSON.stringify(proxy.asJsJson())acts like an inverse to Python’sjson.loads().- Returns:
- PySequence.at(index)#
See
Array.at(). Takes an integer value and returns the item at that index.
- PySequence.concat(...rest)#
The
Array.concat()method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.
- PySequence.entries()#
The
Array.entries()method returns a new iterator object that contains the key/value pairs for each index in theSequence.
- PySequence.every(predicate, thisArg)#
See
Array.every(). Tests whether every element in theSequencepasses the test implemented by the provided function.- Arguments:
- Returns:
- PySequence.filter(predicate, thisArg)#
See
Array.filter(). Creates a shallow copy of a portion of a givenSequence, filtered down to just the elements from the given array that pass the test implemented by the provided function.- Arguments:
- Returns:
any[]
- PySequence.find(predicate, thisArg)#
The
Array.find()method returns the first element in the provided array that satisfies the provided testing function.- Arguments:
- Returns:
any– The first element in theSequencethat satisfies the provided testing function.
- PySequence.findIndex(predicate, thisArg)#
The
Array.findIndex()method returns the index of the first element in the provided array that satisfies the provided testing function.- Arguments:
- Returns:
number– The index of the first element in theSequencethat satisfies the provided testing function.
- PySequence.forEach(callbackfn, thisArg)#
See
Array.forEach(). Executes a provided function once for eachSequenceelement.
- PySequence.includes(elt)#
The
Array.includes()method determines whether a Sequence includes a certain value among its entries, returning true or false as appropriate.
- PySequence.indexOf(elt, fromIndex)#
See
Array.indexOf(). Returns the first index at which a given element can be found in the Sequence, or -1 if it is not present.
- PySequence.join(separator)#
See
Array.join(). TheArray.join()method creates and returns a new string by concatenating all of the elements in theSequence.
- PySequence.keys()#
The
Array.keys()method returns a new iterator object that contains the keys for each index in theSequence.- Returns:
IterableIterator<number> – A new iterator object.
- PySequence.lastIndexOf(elt, fromIndex)#
See
Array.lastIndexOf(). Returns the last index at which a given element can be found in the Sequence, or -1 if it is not present.
- PySequence.map<U>(callbackfn, thisArg)#
See
Array.map(). Creates a new array populated with the results of calling a provided function on every element in the callingSequence.
- PySequence.reduce(callbackfn, initialValue)#
See
Array.reduce(). Executes a user-supplied “reducer” callback function on each element of the Sequence, in order, passing in the return value from the calculation on the preceding element. The final result of running the reducer across all elements of the Sequence is a single value.
- PySequence.reduceRight(callbackfn, initialValue)#
See
Array.reduceRight(). Applies a function against an accumulator and each value of the Sequence (from right to left) to reduce it to a single value.
- PySequence.slice(start, stop)#
See
Array.slice(). TheArray.slice()method returns a shallow copy of a portion of aSequenceinto a new array object selected fromstarttostop(stop not included)- Arguments:
- Returns:
any– A new array containing the extracted elements.
- PySequence.some(predicate, thisArg)#
See
Array.some(). Tests whether at least one element in theSequencepasses the test implemented by the provided function.- Arguments:
- Returns:
- PySequence.values()#
The
Array.values()method returns a new iterator object that contains the values for each index in theSequence.- Returns:
IterableIterator– A new iterator object.
- class pyodide.ffi.PythonError()#
A JavaScript error caused by a Python exception.
In order to reduce the risk of large memory leaks, the
PythonErrorcontains no reference to the Python exception that caused it. You can find the actual Python exception that caused this error assys.last_exc.See type translations of errors for more information.
Avoid leaking stack Frames
If you make a
PyProxyofsys.last_exc, you should be especially careful todestroy()it when you are done. You may leak a large amount of memory including the local variables of all the stack frames in the traceback if you don’t. The easiest way is to only handle the exception in Python.- Extends:
- PythonError.type#
type:
stringThe name of the Python error class, e.g,
RuntimeErrororKeyError.
pyodide.canvas#
This provides APIs to set a canvas for rendering graphics.
For example, you need to set a canvas if you want to use the SDL library. See Using SDL-based packages in Pyodide for more information.
Functions:
Get the HTML5 canvas element used for 2D rendering. |
|
Get the HTML5 canvas element used for 3D rendering. |
|
|
Set the HTML5 canvas element to use for 2D rendering. |
|
Set the HTML5 canvas element to use for 3D rendering. |
- pyodide.canvas.getCanvas2D()#
Get the HTML5 canvas element used for 2D rendering. For now, Emscripten only supports one canvas element, so getCanvas2D and getCanvas3D are the same.
- Returns:
- pyodide.canvas.getCanvas3D()#
Get the HTML5 canvas element used for 3D rendering. For now, Emscripten only supports one canvas element, so getCanvas2D and getCanvas3D are the same.
- Returns:
- pyodide.canvas.setCanvas2D(canvas)#
Set the HTML5 canvas element to use for 2D rendering. For now, Emscripten only supports one canvas element, so setCanvas2D and setCanvas3D are the same.
- Arguments:
canvas (
HTMLCanvasElement)
- pyodide.canvas.setCanvas3D(canvas)#
Set the HTML5 canvas element to use for 3D rendering. For now, Emscripten only supports one canvas element, so setCanvas2D and setCanvas3D are the same.
- Arguments:
canvas (
HTMLCanvasElement)