Change Log
Contents
Change Log¶
Version 0.19.0¶
January 10, 2021
Python package¶
Enhancement If
find_importsis used on code that contains a syntax error, it will return an empty list instead of raising aSyntaxError. #1819Enhancement Added the
pyodide.http.pyfetchAPI which provides a convenience wrapper for the JavascriptfetchAPI. The API returns a response object with various methods that convert the data into various types while minimizing the number of times the data is copied. #1865Enhancement Added the
unpack_archiveAPI to theFetchResponseobject which treats the response body as an archive and usesshutilto unpack it. #1935Fix The Pyodide event loop now works correctly with cancelled handles. In particular,
asyncio.wait_fornow functions as expected. #2022
JavaScript package¶
Fix
loadPyodideno longer fails in the presence of a user-defined global namedprocess. #1849Fix Various webpack buildtime and runtime compatibility issues were fixed. #1900
Enhancement Added the
pyodide.pyimportAPI to import a Python module and return it as aPyProxy. Warning: this is different from the originalpyimportAPI which was removed in this version. #1944Enhancement Added the
pyodide.unpackArchiveAPI which unpacks an archive represented as an ArrayBuffer into the working directory. This is intended as a way to install packages from a local application. #1944API Change
loadPyodidenow accepts ahomedirparameter which sets home directory of Pyodide virtual file system. #1936BREAKING CHANGE The default working directory(home directory) inside the Pyodide virtual file system has been changed from
/to/home/pyodide. To get the previous behavior, you cancall
os.chdir("/")in Python to change working directory orcall
loadPyodidewith thehomedir="/"argument #1936
Python / JavaScript type conversions¶
BREAKING CHANGE Updated the calling convention when a JavaScript function is called from Python to improve memory management of PyProxies. PyProxy arguments and return values are automatically destroyed when the function is finished. #1573
Enhancement Added
JsProxy.to_string,JsProxy.to_bytes, andJsProxy.to_memoryviewto allow for conversion ofTypedArrayto standard Python types without unneeded copies. #1864Enhancement Added
JsProxy.to_fileandJsProxy.from_fileto allow reading and writing Javascript buffers to files as a byte stream without unneeded copies. #1864Fix It is now possible to destroy a borrowed attribute
PyProxyof aPyProxy(as introduced by #1636) before destroying the rootPyProxy. #1854Fix If
__iter__()raises an error, it is now handled correctly by thePyProxy[Symbol.iterator()]method. #1871Fix Borrowed attribute
PyProxys are no longer destroyed when the rootPyProxyis garbage collected (because it was leaked). Doing so has no benefit to nonleaky code and turns some leaky code into broken code (see #1855 for an example). #1870Fix Improved the way that
pyodide.globals.get("builtin_name")works. Before we used__main__.__dict__.update(builtins.__dict__)which led to several undesirable effects such as__name__being equal to"builtins". Now we use a proxy wrapper to replacepyodide.globals.getwith a function that looks up the name onbuiltinsif lookup onglobalsfails. #1905Enhancement Coroutines have their memory managed in a more convenient way. In particular, now it is only necessary to either
awaitthe coroutine or call one of.then,.exceptor.finallyto prevent a leak. It is no longer necessary to manually destroy the coroutine. Example: before:
async function runPythonAsync(code, globals) {
let coroutine = Module.pyodide_py.eval_code_async(code, globals);
try {
return await coroutine;
} finally {
coroutine.destroy();
}
}
After:
async function runPythonAsync(code, globals) {
return await Module.pyodide_py.eval_code_async(code, globals);
}
pyodide-build¶
API Change By default only a minimal set of packages is built. To build all packages set
PYODIDE_PACKAGES='*'In addition,make minimalwas removed, since it is now equivalent tomakewithout extra arguments. #1801Enhancement It is now possible to use
pyodide-build buildallandpyodide-build buildpkgdirectly. #2063Enhancement Added a
--force-rebuildflag tobuildallandbuildpkgwhich rebuilds the package even if it looks like it doesn’t need to be rebuilt. Added a--continueflag which keeps the same source tree for the package and can continue from the middle of a build. #2069Enhancement Changes to environment variables in the build script are now seen in the compile and post build scripts. #1706
Fix Fix usability issues with
pyodide-build mkpkgCLI. #1828Enhancement Better support for ccache when building Pyodide #1805
Fix Fix compile error
wasm-ld: error: unknown argument: --sort-commonandwasm-ld: error: unknown argument: --as-neededin ArchLinux. #1965
micropip¶
Fix micropip now raises an error when installing a non-pure python wheel directly from a url. #1859
Enhancement
micropip.install()now accepts akeep_goingparameter. If set toTrue, micropip reports all identifiable dependencies that don’t have pure Python wheels, instead of failing after processing the first one. #1976Enhancement Added a new API
micropip.list()which returns the list of installed packages by micropip. #2012
Packages¶
Enhancement Unit tests are now unvendored from Python packages and included in a separate package
<package name>-tests. This results in a 20% size reduction on average for packages that vendor tests (e.g. numpy, pandas, scipy). #1832Update Upgraded SciPy to 1.7.3. There are known issues with some SciPy components, the current status of the scipy test suite is here #2065
Fix The built-in pwd module of Python, which provides a Unix specific feature, is now unvendored. #1883
Fix pillow and imageio now correctly encode/decode grayscale and black-and-white JPEG images. #2028
Fix The numpy fft module now works correctly. #2028
New packages: logbook #1920, pyb2d #1968, and threadpoolctl (a dependency of scikit-learn) #2065
Upgraded packages: numpy (1.21.4) #1934, scikit-learn (1.0.2) #2065, scikit-image (0.19.1) #2005, msgpack (1.0.3) #2071, astropy (5.0.3) #2086, statsmodels (0.13.1) #2073, pillow (9.0.0) #2085. This list is not exhaustive, refer to
packages.jsonfor the full list.
Uncategorized¶
Enhancement
PyErr_CheckSignalsnow works with the keyboard interrupt system so that cooperative C extensions can be interrupted. Also, added thepyodide.checkInterruptfunction so Javascript code can opt to be interrupted. #1294Fix The
_variable is now set by the Pyodide repl just like it is set in the native Python repl. #1904Enhancement
pyodide-envandpyodideDocker images are now available from both the Docker Hub and from the Github Package registry. #1995Fix The console now correctly handles it when an object’s
__repr__function raises an exception. #2021Enhancement Removed the
-s EMULATE_FUNCTION_POINTER_CASTSflag, yielding large benefits in speed, stack usage, and code size. #2019
List of contributors¶
Alexey Ignatiev, Alex Hall, Bart Broere, Cyrille Bogaert, etienne, Grimmer, Grimmer Kang, Gyeongjae Choi, Hao Zhang, Hood Chatham, Ian Clester, Jan Max Meyer, LeoPsidom, Liumeo, Michael Christensen, Owen Ou, Roman Yurchak, Seungmin Kim, Sylvain, Thorsten Beier, Wei Ouyang, Will Lachance
Version 0.18.1¶
September 16, 2021
Console¶
Fix Ctrl+C handling in console now works correctly with multiline input. New behavior more closely approximates the behavior of the native Python console. #1790
Fix Fix the repr of Python objects (including lists and dicts) in console #1780
Fix The “long output truncated” message now appears on a separate line as intended. #1814
Fix The streams that are used to redirect stdin and stdout in the console now define
isattyto returnTrue. This fixes pytest. #1822
JavaScript package¶
Fix The
pyodide.setInterruptBuffercommand is now publicly exposed again, as it was in v0.17.0. #1797
Python / JavaScript type conversions¶
Version 0.18.0¶
August 3rd, 2021
General¶
Update Pyodide now runs Python 3.9.5. #1637
Enhancement Pyodide can experimentally be used in Node.js #1689
Enhancement Pyodide now directly exposes the Emscripten filesystem API, allowing for direct manipulation of the in-memory filesystem #1692
Enhancement Pyodide’s support of emscripten file systems is expanded from the default
MEMFSto includeIDBFS,NODEFS,PROXYFS, andWORKERFS, allowing for custom persistence strategies depending on execution environment #1596API Change The
packages.jsonschema for Pyodide was redesigned for better compatibility with conda. #1700API Change
run_dockerno longer binds any port to the docker image by default. #1750
Standard library¶
API Change The following standard library modules are now available as standalone packages
distlib
They are loaded by default in
loadPyodide, however this behavior can be disabled with thefullStdLibparameter set tofalse. All optional stdlib modules can then be loaded as needed withpyodide.loadPackage. #1543Enhancement The standard library module
audioopis now included, making thewave,sndhdr,aifc, andsunaumodules usable. #1623Enhancement Added support for
ctypes. #1656
JavaScript package¶
Enhancement The Pyodide JavaScript package is released to npm under npmjs.com/package/pyodide #1762
API Change
loadPyodideno longer automatically stores the API into a global variable calledpyodide. To get old behavior, sayglobalThis.pyodide = await loadPyodide({...}). #1597Enhancement
loadPyodidenow accepts callback functions forstdin,stdoutandstderr#1728Enhancement Pyodide now ships with first party typescript types for the entire JavaScript API (though no typings are available for
PyProxyfields). #1601Enhancement It is now possible to import
Comlinkobjects into Pyodide after usingpyodide.registerComlink#1642Enhancement If a Python error occurs in a reentrant
runPythoncall, the error will be propagated into the outerrunPythoncontext as the original error type. This is particularly important if the error is aKeyboardInterrupt. #1447
Python package¶
Enhancement Added a new
CodeRunnerAPI for finer control thaneval_codeandeval_code_async. Designed with the needs of REPL implementations in mind. #1563Enhancement Added
Consoleclass closely based on the Python standard librarycode.InteractiveConsolebut with support for top level await and stream redirection. Also added the subclassPyodideConsolewhich automatically usespyodide.loadPackagesFromImportson the code before running it. #1125, #1155, #1635Fix
eval_code_asyncno longer automatically awaits a returned coroutine or attempts to await a returned generator object (which triggered an error). #1563
Python / JavaScript type conversions¶
API Change
pyodide.runPythonAsyncno longer automatically callspyodide.loadPackagesFromImports. #1538.Enhancement Added the
PyProxy.callKwargsmethod to allow using Python functions with keyword arguments from JavaScript. #1539Enhancement Added the
PyProxy.copymethod. #1549 #1630API Change Updated the method resolution order on
PyProxy. Performing a lookup on aPyProxywill prefer to pick a method from thePyProxyapi, if no such method is found, it will usegetattron the proxied object. Prefixing a name with$forcesgetattr. For instance,PyProxy.destroynow always refers to the method that destroys the proxy, whereasPyProxy.$destroyrefers to an attribute or method calleddestroyon the proxied object. #1604API Change It is now possible to use
Symbolkeys with PyProxies. TheseSymbolkeys put markers on the PyProxy that can be used by external code. They will not currently be copied byPyProxy.copy. #1696Enhancement Memory management of
PyProxyfields has been changed so that fields looked up on aPyProxyare “borrowed” and have their lifetime attached to the basePyProxy. This is intended to allow for more idiomatic usage. (See #1617.) #1636API Change The depth argument to
toJsis now passed as an option, sotoJs(n)in v0.17 changed totoJs({depth : n}). Similarly,pyodide.toPynow takesdepthas a named argument. Alsoto_jsandto_pyonly take depth as a keyword argument. #1721API Change
toJsandto_jsnow take an optionpyproxies, if a JavaScript Array is passed for this, then any proxies created during conversion will be placed into this array. This allows easy cleanup later. Thecreate_pyproxiesoption can be used to disable creation of pyproxies during conversion (instead aConversionErroris raised). #1726API Change
toJsandto_jsnow take an optiondict_converterwhich will be called on a JavaScript iterable of two-element Arrays as the final step of converting dictionaries. For instance, passObject.fromEntriesto convert to an object orArray.fromto convert to an array of pairs. #1742
pyodide-build¶
API Change pyodide-build is now an installable Python package, with an identically named CLI entrypoint that replaces
bin/pyodidewhich is removed #1566
micropip¶
Fix micropip now correctly handles packages that have mixed case names. (See #1614). #1615
Enhancement micropip now resolves dependencies correctly for old versions of packages (it used to always use the dependencies from the most recent version, see #1619 and #1745). micropip also will resolve dependencies for wheels loaded from custom urls. #1753
Packages¶
Enhancement matplotlib now comes with a new renderer based on the html5 canvas element. #1579 It is optional and the current default backend is still the agg backend compiled to wasm.
Enhancement Updated a number of packages included in Pyodide.
List of contributors¶
Albertas Gimbutas, Andreas Klostermann, arfy slowy, daoxian, Devin Neal, fuyutarow, Grimmer, Guido Zuidhof, Gyeongjae Choi, Hood Chatham, Ian Clester, Itay Dafna, Jeremy Tuloup, jmsmdy, LinasNas, Madhur Tandon, Michael Christensen, Nicholas Bollweg, Ondřej Staněk, Paul m. p. P, Piet Brömmel, Roman Yurchak, stefnotch, Syrus Akbary, Teon L Brooks, Waldir
Version 0.17.0¶
April 21, 2021
See the Version 0.17.0 Release Notes for more information.
Improvements to package loading and dynamic linking¶
Enhancement Uses the emscripten preload plugin system to preload .so files in packages
Enhancement Support for shared library packages. This is used for CLAPACK which makes scipy a lot smaller. #1236
Fix Pyodide and included packages can now be used with Safari v14+. Safari v13 has also been observed to work on some (but not all) devices.
Python / JS type conversions¶
Feature A
JsProxyof a JavaScriptPromiseor other awaitable object is now a Python awaitable. #880API Change Instead of automatically converting Python lists and dicts into JavaScript, they are now wrapped in
PyProxy. Added a newPyProxy.toJsAPI to request the conversion behavior that used to be implicit. #1167API Change Added
JsProxy.to_pyAPI to convert a JavaScript object to Python. #1244Feature Flexible jsimports: it now possible to add custom Python “packages” backed by JavaScript code, like the
jspackage. Thejspackage is now implemented using this system. #1146Feature A
PyProxyof a Python coroutine or awaitable is now an awaitable JavaScript object. Awaiting a coroutine will schedule it to run on the Python event loop usingasyncio.ensure_future. #1170Enhancement Made
PyProxyof an iterable Python object an iterable Js object: defined the[Symbol.iterator]method, can be used likefor(let x of proxy). Made aPyProxyof a Python iterator an iterator:proxy.next()is translated tonext(it). Made aPyProxyof a Python generator into a JavaScript generator:proxy.next(val)is translated togen.send(val). #1180API Change Updated
PyProxyso that if the wrapped Python object supports__getitem__access, then the wrapper hasget,set,has, anddeletemethods which doobj[key],obj[key] = val,key in objanddel obj[key]respectively. #1175API Change The
pyodide.pyimportfunction is deprecated in favor of usingpyodide.globals.get('key'). #1367API Change Added
PyProxy.getBufferAPI to allow direct access to Python buffers as JavaScript TypedArrays. #1215API Change The innermost level of a buffer converted to JavaScript used to be a TypedArray if the buffer was contiguous and otherwise an Array. Now the innermost level will be a TypedArray unless the buffer format code is a ‘?’ in which case it will be an Array of booleans, or if the format code is a “s” in which case the innermost level will be converted to a string. #1376
Enhancement JavaScript
BigInts are converted into Pythonintand Pythonints larger than 2^53 are converted intoBigInt. #1407API Change Added
pyodide.isPyProxyto test if an object is aPyProxy. #1456Enhancement
PyProxyandPyBufferobjects are now garbage collected if the browser supportsFinalizationRegistry. #1306Enhancement Automatic conversion of JavaScript functions to CPython calling conventions. #1051, #1080
Enhancement Automatic detection of fatal errors. In this case Pyodide will produce both a JavaScript and a Python stack trace with explicit instruction to open a bug report. pr
{1151}, pr{1390}, pr{1478}.Enhancement Systematic memory leak detection in the test suite and a large number of fixed to memory leaks. pr
{1340}Fix getattr and dir on JsProxy now report consistent results and include all names defined on the Python dictionary backing JsProxy. #1017
Fix
JsProxy.__bool__now produces more consistent results: bothbool(window)andbool(zero-arg-callback)wereFalsebut now areTrue. Conversely,bool(empty_js_set)andbool(empty_js_map)wereTruebut now areFalse. #1061Fix When calling a JavaScript function from Python without keyword arguments, Pyodide no longer passes a
PyProxy-wrappedNULLpointer as the last argument. #1033Fix JsBoundMethod is now a subclass of JsProxy, which fixes nested attribute access and various other strange bugs. #1124
Fix JavaScript functions imported like
from js import fetchno longer trigger “invalid invocation” errors (issue #461) andjs.fetch("some_url")also works now (issue #768). #1126Fix JavaScript bound method calls now work correctly with keyword arguments. #1138
Fix JavaScript constructor calls now work correctly with keyword arguments. #1433
pyodide-py package¶
Feature Added a Python event loop to support asyncio by scheduling coroutines to run as jobs on the browser event loop. This event loop is available by default and automatically enabled by any relevant asyncio API, so for instance
asyncio.ensure_futureworks without any configuration. #1158API Change Removed
as_nested_listAPI in favor ofJsProxy.to_py. #1345
pyodide-js¶
API Change Removed iodide-specific code in
pyodide.js. This breaks compatibility with iodide. #878, #981API Change Removed the
pyodide.autocompleteAPI, use Jedi directly instead. #1066API Change Removed
pyodide.reprAPI. #1067Fix If
messageCallbackanderrorCallbackare supplied topyodide.loadPackage,pyodide.runPythonAsyncandpyodide.loadPackagesFromImport, then the messages are no longer automatically logged to the console.Feature
runPythonAsyncnow runs the code witheval_code_async. In particular, it is possible to use top-level await inside ofrunPythonAsync.eval_codenow accepts separateglobalsandlocalsparameters. #1083Added the
pyodide.setInterruptBufferAPI. This can be used to set aSharedArrayBufferto be the keyboard interupt buffer. If Pyodide is running on a webworker, the main thread can signal to the webworker that it should raise aKeyboardInterruptby writing to the interrupt buffer. #1148 and #1173Changed the loading method: added an async function
loadPyodideto load Pyodide to use instead oflanguagePluginURLandlanguagePluginLoader. The change is currently backwards compatible, but the old approach is deprecated. #1363runPythonAsyncnow acceptsglobalsparameter. #1914
micropip¶
Feature
micropipnow supports installing wheels from relative URLs. #872API Change
micropip.installnow returns a PythonFutureinstead of a JavaScriptPromise. #1324Fix
micropip.installnow interacts correctly withpyodide.loadPackage. #1457Fix
micropip.installnow handles version constraints correctly even if there is a version of the package available from the PyodideindexURL.
Build system¶
Enhancement Updated to latest emscripten 2.0.13 with the updstream LLVM backend #1102
API Change Use upstream
file_packager.py, and stop checking package abi versions. ThePYODIDE_PACKAGE_ABIenvironment variable is no longer used, but is still set as some packages use it to detect whether it is being built for Pyodide. This usage is deprecated, and a new environment variablePYODIDEis introduced for this purpose.As part of the change, Module.checkABI is no longer present. #991
uglifyjs and lessc no longer need to be installed in the system during build #878.
Enhancement Reduce the size of the core Pyodide package #987.
Enhancement Optionally to disable docker port binding #1423.
Enhancement Run arbitrary command in docker #1424
Docker images for Pyodide are now accessible at pyodide/pyodide-env and pyodide/pyodide.
Enhancement Option to run docker in non-interactive mode #1641
REPL¶
Fix In console.html: sync behavior, full stdout/stderr support, clean namespace, bigger font, correct result representation, clean traceback #1125 and #1141
Fix Switched from ̀Jedi to rlcompleter for completion in
pyodide.console.InteractiveConsoleand so inconsole.html. This fixes some completion issues (see #821 and #1160)Enhancement Support top-level await in the console #1459
Packages¶
List of contributors¶
(in alphabetic order)
Aditya Shankar, casatir, Dexter Chua, dmondev, Frederik Braun, Hood Chatham, Jan Max Meyer, Jeremy Tuloup, joemarshall, leafjolt, Michael Greminger, Mireille Raad, Ondřej Staněk, Paul m. p. P, rdb, Roman Yurchak, Rudolfs
Version 0.16.1¶
December 25, 2020
Note: due to a CI deployment issue the 0.16.0 release was skipped and replaced by 0.16.1 with identical contents.
Pyodide files are distributed by JsDelivr,
https://cdn.jsdelivr.net/pyodide/v0.16.1/full/pyodide.jsThe previous CDNpyodide-cdn2.iodide.iostill works and there are no plans for deprecating it. However please use JsDelivr as a more sustainable solution, including for earlier Pyodide versions.
Python and the standard library¶
Pyodide includes CPython 3.8.2 #712
ENH Patches for the threading module were removed in all packages. Importing the module, and a subset of functionality (e.g. locks) works, while starting a new thread will produce an exception, as expected. #796. See #237 for the current status of the threading support.
ENH The multiprocessing module is now included, and will not fail at import, thus avoiding the necessity to patch included packages. Starting a new process will produce an exception due to the limitation of the WebAssembly VM with the following message:
Resource temporarily unavailable#796.
Python / JS type conversions¶
pyodide-py package and micropip¶
The
pyodide.pyfile was transformed to a pyodide-py package. The imports remain the same so this change is transparent to the users #909.FIX Get last version from PyPI when installing a module via micropip #846.
Suppress REPL results returned by
pyodide.eval_codeby adding a semicolon #876.Enable monkey patching of
eval_codeandfind_importsto customize behavior ofrunPythonandrunPythonAsync#941.
Build system¶
Updated docker image to Debian buster, resulting in smaller images. #815
Pre-built docker images are now available as
iodide-project/pyodide#787Host Python is no longer compiled, reducing compilation time. This also implies that Python 3.8 is now required to build Pyodide. It can for instance be installed with conda. #830
FIX Infer package tarball directory from source URL #687
Updated to emscripten 1.38.44 and binaryen v86 (see related commits)
Updated default
--ldflagsargument topyodide_buildscripts to equal what Pyodide actually uses. #817Replace C lz4 implementation with the (upstream) JavaScript implementation. #851
Pyodide deployment URL can now be specified with the
PYODIDE_BASE_URLenvironment variable during build. Thepyodide_dev.jsis no longer distributed. To get an equivalent behavior withpyodide.js, setwindow.languagePluginUrl = "./";
before loading it. #855
Build runtime C libraries (e.g. libxml) via package build system with correct dependency resolution #927
Pyodide can now be built in a conda virtual environment #835
Other improvements¶
Modifiy MEMFS timestamp handling to support better caching. This in particular allows to import newly created Python modules without invalidating import caches #893
Packages¶
New packages: freesasa, lxml, python-sat, traits, astropy, pillow, scikit-image, imageio, numcodecs, msgpack, asciitree, zarr
Note that due to the large size and the experimental state of the scipy package, packages that depend on scipy (including scikit-image, scikit-learn) will take longer to load, use a lot of memory and may experience failures.
Updated packages: numpy 1.15.4, pandas 1.0.5, matplotlib 3.3.3 among others.
New package pyodide-interrupt, useful for handling interrupts in Pyodide (see project description for details).
Backward incompatible changes¶
Dropped support for loading .wasm files with incorrect MIME type, following #851
List of contributors¶
abolger, Aditya Shankar, Akshay Philar, Alexey Ignatiev, Aray Karjauv, casatir, chigozienri, Christian glacet, Dexter Chua, Frithjof, Hood Chatham, Jan Max Meyer, Jay Harris, jcaesar, Joseph D. Long, Matthew Turk, Michael Greminger, Michael Panchenko, mojighahar, Nicolas Ollinger, Ram Rachum, Roman Yurchak, Sergio, Seungmin Kim, Shyam Saladi, smkm, Wei Ouyang
Version 0.15.0¶
May 19, 2020
Upgrades Pyodide to CPython 3.7.4.
micropip no longer uses a CORS proxy to install pure Python packages from PyPI. Packages are now installed from PyPI directly.
micropip can now be used from web workers.
Adds support for installing pure Python wheels from arbitrary URLs with micropip.
The CDN URL for Pyodide changed to https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js It now supports versioning and should provide faster downloads. The latest release can be accessed via https://pyodide-cdn2.iodide.io/latest/full/
Adds
messageCallbackanderrorCallbacktopyodide.loadPackage.Reduces the initial memory footprint (
TOTAL_MEMORY) from 1 GiB to 5 MiB. More memory will be allocated as needed.When building from source, only a subset of packages can be built by setting the
PYODIDE_PACKAGESenvironment variable. See partial builds documentation for more details.New packages: future, autograd
Version 0.14.3¶
Dec 11, 2019
Convert JavaScript numbers containing integers, e.g.
3.0, to a real Python long (e.g.3).Adds
__bool__method to forJsProxyobjects.Adds a JavaScript-side auto completion function for Iodide that uses jedi.
New packages: nltk, jeudi, statsmodels, regex, cytoolz, xlrd, uncertainties
Version 0.14.0¶
Aug 14, 2019
The built-in
sqliteandbz2modules of Python are now enabled.Adds support for auto-completion based on jedi when used in iodide
Version 0.12.0¶
May 3, 2019
User improvements:
Packages with pure Python wheels can now be loaded directly from PyPI. See Micropip for more information.
Thanks to PEP 562, you can now
import jsfrom Python and use it to access anything in the global JavaScript namespace.Passing a Python object to JavaScript always creates the same object in JavaScript. This makes APIs like
removeEventListenerusable.Calling
dir()in Python on a JavaScript proxy now works.Passing an
ArrayBufferfrom JavaScript to Python now correctly creates amemoryviewobject.Pyodide now works on Safari.
Version 0.11.0¶
Apr 12, 2019
User improvements:
Support for built-in modules:
sqlite,crypt
New packages:
mne
Developer improvements:
The
mkpkgcommand will now select an appropriate archive to use, rather than just using the first.The included version of emscripten has been upgraded to 1.38.30 (plus a bugfix).
New packages:
jinja2,MarkupSafe
Version 0.10.0¶
Mar 21, 2019
User improvements:
New packages:
html5lib,pygments,beautifulsoup4,soupsieve,docutils,bleach,mne
Developer improvements:
console.htmlprovides a simple text-only interactive console to test local changes to Pyodide. The existing notebooks based on legacy versions of Iodide have been removed.The
run_dockerscript can now be configured with environment variables.