diff --git a/docs/project/changelog.md b/docs/project/changelog.md index 177a6f082..cbeff9b94 100644 --- a/docs/project/changelog.md +++ b/docs/project/changelog.md @@ -14,45 +14,23 @@ substitutions: ## Unreleased -- `pyodide-cdn2.iodide.io` is not available anymore. Please use `https://cdn.jsdelivr.net/pyodide` instead. - {pr}`3150`. - -- {{ Breaking }} We now don't publish pre-built Pyodide docker images - anymore. Note that `./run_docker --pre-built` was not working for a while - and it was actually equivalent to `./run_docker`. If you need to build a - single Python wheel out of tree, you can use the `pyodide build` command - instead. See [our blog post](https://blog.pyodide.org/posts/0.21-release/#building-binary-wheels-for-pyodide) - for more information. - {pr}`3342`. - -- {{ Enhancement }} Added a system for making Pyodide virtual environments. This - is for testing out of tree builds. For more information, see [the - documentation](https://pyodide.org/en/stable/development/out-of-tree.html). - {pr}`2976`, {pr}`3039`, {pr}`3040`, {pr}`3044`, {pr}`3096`, {pr}`3098`, - {pr}`3108`, {pr}`3109`, {pr}`3241` - -- {{ Enhancement }} Users can do a static import of `pyodide/pyodide.asm.js` to - avoid issues with dynamic imports. This allows the use of Pyodide with - module-type service workers. - {pr}`3070` - -- {{ Enhancement }} Emscripten was updated to Version 3.1.27 +- {{ Enhancement }} Updated Emscripten to version 3.1.27 {pr}`2958`, {pr}`2950`, {pr}`3027`, {pr}`3107`, {pr}`3148`, {pr}`3236`, {pr}`3239`, {pr}`3280`, {pr}`3314` -- {{ Enhancement }} Added a new API {any}`pyodide.mountNativeFS` - which mounts [FileSystemDirectoryHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle) - into the Pyodide file system. - {pr}`2987` +### Deployment and testing -- {{ Enhancement }} Implemented `reverse`, `__reversed__`, `count`, `index`, - `append`, and `pop` for `JsProxy` of Javascript arrays. - {pr}`2970` +- {{ Breaking }} `pyodide-cdn2.iodide.io` is not available anymore. Please use + `https://cdn.jsdelivr.net/pyodide` instead. + {pr}`3150`. -- {{ Enhancement }} Implemented methods `keys`, `items`, `values`, `get`, `pop`, - `setdefault`, `popitem`, `update`, and `clear` for `JsProxy` of map-like - objects. - {pr}`3275` +- {{ Breaking }} We don't publish pre-built Pyodide docker images anymore. Note + that `./run_docker --pre-built` was not working for a while and it was + actually equivalent to `./run_docker`. If you need to build a single Python + wheel out of tree, you can use the `pyodide build` command instead. See + [our blog post](https://blog.pyodide.org/posts/0.21-release/#building-binary-wheels-for-pyodide) + for more information. + {pr}`3342`. - {{ Enhancement }} The releases are now called `pyodide-{version}.tar.gz` rather than `pyodide-build-{version}.tar.gz` @@ -63,32 +41,40 @@ substitutions: files needed to start Pyodide and no additional packages. {pr}`2999` +- {{ Enhancement }} The full test suite is now run in Safari + {pr}`2578`, {pr}`3095`. + +- {{ Enhancement }} Added Gitpod configuration to the repository. + {pr}`3201` + +### Foreign function interface + +#### JsProxy / JavaScript from Python + +- {{ Enhancement }} Implemented `reverse`, `__reversed__`, `count`, `index`, + `append`, and `pop` for `JsProxy` of Javascript arrays so that they + implement the `collections.abc.MutableSequence` API. + {pr}`2970` + +- {{ Enhancement }} Implemented methods `keys`, `items`, `values`, `get`, `pop`, + `setdefault`, `popitem`, `update`, and `clear` for `JsProxy` of map-like + objects so that they implement the `collections.abc.MutableMapping` API. + {pr}`3275` + +- {{ Enhancement }} It's now possible to destructure a JavaScript array, map, or + object returned by `as_object_map` with a `match` statement. + {pr}`2906` + - {{ Enhancement }} Added `then`, `catch`, and `finally_` methods to the `Future`s - used by Pyodide's event loop. + used by Pyodide's event loop so they can be used like `Promise`s. {pr}`2997` -- {{ Enhancement }} `loadPyodide` has a new option called `args`. This list will - be passed as command line arguments to the Python interpreter at start up. - {pr}`3021` - -- {{ Enhancement }} The full test suite is now run in Safari {pr}`2578` {pr}`3095`. - -- {{ Enhancement }} It is possible to make a `PyProxy` that takes `this` as the - first argument using the {any}`captureThis` method. The {any}`create_proxy` - method also has a `capture_this` argument which causes the `PyProxy` to - receive `this` as the first argument if set to `True` - {pr}`3103`, {pr}`3145` - - {{ Enhancement }} `create_proxy` now takes an optional `roundtrip` parameter. If this is set to `True`, then when the proxy is converted back to Python, it is converted back to the same double proxy. This allows the proxy to be destroyed from Python even if no reference is retained. {pr}`3163` -- {{ Enhancement }} Pyodide now shows more helpful error messages when - importing packages that are included in Pyodide fails. - {pr}`3137`, {pr}`3263` - - {{ Enhancement }} A `JsProxy` of a function now has a `__get__` descriptor method, so it's possible to use a JavaScript function as a Python method. When the method is called, `this` will be a `PyProxy` pointing to the Python object @@ -97,7 +83,8 @@ substitutions: - {{ Enhancement }} A `JsProxy` now has an `as_object_map` method. This will treat the object as a mapping over its `ownKeys` so for instance: - `run_js("({a:2, b:3})").as_object_map()["a"]` will return 2. + `run_js("({a:2, b:3})").as_object_map()["a"]` will return 2. These implement + `collections.abc.MutableMapping`. {pr}`3273`, {pr}`3295`, {pr}`3297` - {{ Enhancement }} Split up the `JsProxy` documentation class into several @@ -107,70 +94,6 @@ substitutions: at least closer to that than it was before). {pr}`3277` -- {{ Breaking }} The messageCallback and errorCallback argument to - {any}`loadPackage ` and - {any}`loadPackagesFromImports ` - is now passed as named arguments. - The old usage still works with a deprecation warning. - {pr}`3149` - -- {{ Enhancement }} {any}`loadPackage ` and - {any}`loadPackagesFromImports ` now accepts - a new option `checkIntegrity`. If set to False, integrity check for Python Packages - will be disabled. - -- {{ Enhancement }} Added APIs {any}`setStdin `, - {any}`setStdout `, {any}`setStderr ` for - changing the stream handlers after loading Pyodide. Also added more careful - control over whether `isatty` returns true or false on stdin, stdout, and - stderr. - {pr}`3268` - -- {{ Fix }} Fix undefined symbol error when loading shared library - {pr}`3193` - -- {{ Fix }} Shared libraries with version suffix are now handled correctly. - {pr}`3154` - -- {{ Fix }} Scipy CSR data is now handled correctly in XGBoost. - {pr}`3194` - -- Added a new CLI command `pyodide sekeleton` which creates a package build recipe. - `pyodide-build mkpkg` will be replaced by `pyodide sekeleton pypi`. - {pr}`3175` - -- Added a new CLI command `pyodide build-recipes` which build packages from recipe folder. - It replaces `pyodide-build buildall`. - {pr}`3196` {pr}`3279` - -- Added subcommands for `pyodide build` which builds packages from various sources. - | command | result | - |------------------------|-----------------------------------------| - | `pyodide build pypi` | build or fetch a single package from pypi | - | `pyodide build source` | build the current source folder (same as pyodide build) | - | `pyodide build url` | build or fetch a package from a url either tgz, tar.gz zip or wheel | - {pr}`3196` - -- {{ Fix }} Fixed bug in `split` argument of {any}`repr_shorten`. Added {any}`shorten` function. - {pr}`3178` - -- {{ Fix }} Pyodide now loads correctly with `-OO` option. - -- Add Gitpod configuration to the repository. - {pr}`3201` - -- {{ Enhancement }} Added a type field to `PythonError` - {pr}`3289` - -- {{ Enhancement }} It is now possible to use aynchronous Python generators from - JavaScript. - {pr}`3290` - -- {{ Enhancement }} PyProxies of synchronous and asynchronous Python generators - now support `return` and `throw` APIs that behave like the ones on JavaScript - generators. - {pr}`3346` - - {{ Enhancement }} Added `JsGenerator` and `JsIterator` types to `pyodide.ffi`. Added `send` method to `JsIterator`s and `throw`, and `close` methods to `JsGenerator`s. {pr}`3294` @@ -191,11 +114,77 @@ substitutions: `js` module. {pr}`3298` +- {{ Fix }} Fixed bug in `split` argument of {any}`repr_shorten`. Added {any}`shorten` function. + {pr}`3178` + +### PyProxy / Using Python from JavaScript + +- {{ Enhancement }} Added a type field to `PythonError` (e.g., a StopIteration + error would have `e.type === "StopIteration"`) + {pr}`3289` + +- {{ Enhancement }} It is now possible to use aynchronous Python generators from + JavaScript. + {pr}`3290` + +- {{ Enhancement }} PyProxies of synchronous and asynchronous Python generators + now support `return` and `throw` APIs that behave like the ones on JavaScript + generators. + {pr}`3346` + +- {{ Enhancement }} It is possible to make a `PyProxy` that takes `this` as the + first argument using the {any}`captureThis` method. The {any}`create_proxy` + method also has a `capture_this` argument which causes the `PyProxy` to + receive `this` as the first argument if set to `True` + {pr}`3103`, {pr}`3145` + +### JavaScript API + +- {{ Enhancement }} Users can do a static import of `pyodide/pyodide.asm.js` to + avoid issues with dynamic imports. This allows the use of Pyodide with + module-type service workers. + {pr}`3070` + +- {{ Enhancement }} Added a new API {any}`pyodide.mountNativeFS` + which mounts [FileSystemDirectoryHandle](https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle) + into the Pyodide file system. + {pr}`2987` + +- {{ Enhancement }} `loadPyodide` has a new option called `args`. This list will + be passed as command line arguments to the Python interpreter at start up. + {pr}`3021`, {pr}`3282` + - Removed "Python initialization complete" message printed when loading is finished. - {pr}`3247` + {pr}`3247 -### Build System / Package Loading +- {{ Breaking }} The messageCallback and errorCallback argument to + {any}`loadPackage ` and + {any}`loadPackagesFromImports ` + is now passed as named arguments. + The old usage still works with a deprecation warning. + {pr}`3149` + +- {{ Enhancement }} {any}`loadPackage ` and + {any}`loadPackagesFromImports ` now accepts + a new option `checkIntegrity`. If set to False, integrity check for Python Packages + will be disabled. + +- {{ Enhancement }} Added APIs {any}`setStdin `, + {any}`setStdout `, {any}`setStderr ` for + changing the stream handlers after loading Pyodide. Also added more careful + control over whether `isatty` returns true or false on stdin, stdout, and + stderr. + {pr}`3268` + +### Package Loading + +- {{ Enhancement }} Pyodide now shows more helpful error messages when + importing packages that are included in Pyodide fails. + {pr}`3137`, {pr}`3263` + +- {{ Fix }} Shared libraries with version suffixes are now handled correctly. + {pr}`3154` - {{ Breaking }} Unvendored the sqlite3 module from the standard library. Before `sqlite3` was included by default. Now it needs to be loaded with @@ -206,9 +195,6 @@ substitutions: rather than `/lib/python3.10/site-packages`. {pr}`3022` -- {{ Update }} Upgraded SciPy to version 1.9.1. - {pr}`3043` - - {{ Breaking }} The matplotlib HTML5 backends are now available as part of the [`matplotlib-pyodide`](https://github.com/pyodide/matplotlib-pyodide) package. If you use the default backend from Pyodide, no changes are @@ -237,10 +223,10 @@ substitutions: {pr}`3122` - {{ Enhancement }} The parsing and validation of `meta.yaml` according to the - specification is now done more rigourously with Pydantic + specification is now done more rigorously with Pydantic. {pr}`3079` -- {{ Breaking }} `source/md5` checksum field is not longer supported in +- {{ Breaking }} The `source/md5` checksum field is not longer supported in `meta.yaml` files, use `source/sha256` instead {pr}`3079` @@ -248,10 +234,6 @@ substitutions: `pyodide_build.MetaConfig.from_yaml` {pr}`3079` -- Pyodide JavaScript package can now built with - debug codes by setting `PYODIDE_DEBUG_JS` env variable when building. - {pr}`3129` - - {{ Fix }} `ctypes.util.find_library` will now search WASM modules from LD_LIBRARY_PATH. {pr}`3353` @@ -289,6 +271,28 @@ substitutions: directory when it is already built. {pr}`3212` +- {{ Enhancement }} Added a system for making Pyodide virtual environments. This + is for testing out of tree builds. For more information, see [the + documentation](https://pyodide.org/en/stable/development/out-of-tree.html). + {pr}`2976`, {pr}`3039`, {pr}`3040`, {pr}`3044`, {pr}`3096`, {pr}`3098`, + {pr}`3108`, {pr}`3109`, {pr}`3241` + +- Added a new CLI command `pyodide skeleton` which creates a package build recipe. + `pyodide-build mkpkg` will be replaced by `pyodide skeleton pypi`. + {pr}`3175` + +- Added a new CLI command `pyodide build-recipes` which build packages from recipe folder. + It replaces `pyodide-build buildall`. + {pr}`3196` {pr}`3279` + +- Added subcommands for `pyodide build` which builds packages from various sources. + | command | result | + |------------------------|-----------------------------------------| + | `pyodide build pypi` | build or fetch a single package from pypi | + | `pyodide build source` | build the current source folder (same as pyodide build) | + | `pyodide build url` | build or fetch a package from a url either tgz, tar.gz zip or wheel | + {pr}`3196` + ### Packages - New packages: pycryptodome {pr}`2965`, @@ -298,6 +302,12 @@ substitutions: the standard library \_hashlib module {pr}`3206` , pyinstrument {pr}`3258`, gensim {pr}`3326`, smart_open {pr}`3326`, pyodide-http {pr}`3355`. +- {{ Fix }} Scipy CSR data is now handled correctly in XGBoost. + {pr}`3194` + +- {{ Update }} Upgraded SciPy to version 1.9.1. + {pr}`3043` + - {{ Update }} Upgraded pandas to version 1.5.0. {pr}`3134`