The documentation for this release is at https://pyoxidizer.readthedocs.io/en/pyoxidizer-0.21.0/pyoxidizer.html.
Backwards Compatibility Notes
* The minimum Rust version has been changed from 1.56 to 1.60 to facilitate
use of features required by some Rust crates.
* The default Python version is 3.10 (instead of 3.9).
Bug Fixes
* Fixed regression in the behavior of various ``pyoxidizer`` commands which
prevented them from working without specifying any arguments. This regression
was introduced in 0.20 with the upgrade of the ``clap`` crate to version 3.1.
(523)
* PyO3 Rust crates upgraded from 0.16.4 to 0.16.5. The upgrade fixes compatibility
issues with Python 3.10 that could lead to runtime crashes or incorrect behavior
in many configurations.
* Fixed a runtime panic when incorrect attribute assignments were attempted on the
`PythonExtensionModule`, `PythonPackageDistributionResource`, and
`PythonPackageResource` Starlark types. (561)
* We no longer panic when encountering invalid UTF-8 when reading process output
of various ``python`` invocations. Previously, invocations of ``pip``,
`setup.py`, and other processes could result in a panic if invalid UTF-8 was
emitted. (579)
New Features
* Default CPython distributions upgraded from 3.8.12, 3.9.10, and 3.10.2
to 3.8.13, 3.9.13, and 3.10.4, respectively. See additional changes in
these distributions at
https://github.com/indygreg/python-build-standalone/releases/tag/20220318,
https://github.com/indygreg/python-build-standalone/releases/tag/20220501,
and https://github.com/indygreg/python-build-standalone/releases/tag/20220528.
* The default Python version is now 3.10 (instead of 3.9).
* The mechanism for handling software licenses has been overhauled.
* The formatting of licenses during building has changed significantly.
* Rust licensing information is now dynamically derived at build time rather
than derived from a static list. The Rust components with annotated licensing
should be more accurate as a result.
* `PythonExecutable` Starlark types now write out a file containing
licensing information for software components within the binary. This restores
a feature that was dropped in version 0.5. The name of the file (or disabling
of the feature) can be controlled via the
`PythonExecutable.licenses_filename` attribute.
* A new `pyoxidizer rust-project-licensing` command for printing licensing
information for Rust projects. This can be used to help debug Rust licensing
issues or to generate licensing content for any Rust project.
* A `PythonExecutable.add_cargo_manifest_licensing` Starlark method for
registering the licensing information for a `Cargo.toml` Rust project. This can
be used by Rust projects wishing to have their licensing information captured.
* Initial support for `aarch64-unknown-linux-gnu` Python distributions. The
distributions are now defined and PyOxidizer should use them when appropriate.
However, the distributions aren't yet well tested. So feedback on their
operation via GitHub issues would be appreciated!
* `aarch64-apple-darwin` (Apple M1) now has a default Python 3.8 distribution.
This distribution is not very well tested and use of a Python 3.9+ for Apple M1 is
strongly advised.
Other Relevant Changes
* Managed Rust toolchain upgraded from 1.56.1 to 1.61.0.
* Starlark `PythonInterpreterConfig` documentation has been changed
to refer to `pyembed_interpreter_config`. The latter is automatically
derived from the canonical Rust source code. So the change effectively results
in a single, consistent set of documentation for interpreter configuration.
* The mechanism for locating the Apple SDK now uses the
[apple-sdk](https://crates.io/crates/apple-sdk) Rust crate. The new crate
work similarly to how our custom logic was working before. But there may be
subtle changes in behavior. If you see new build errors related to Apple SDKs
in this release, don't hesitate to create an issue. One notable change is that
we will now look for SDKs in all ``/Applications/Xcode*.app`` directories. In
environments like GitHub Actions, this will result in finding and using the
newest installed SDK.
* The jemalloc allocator in built binaries has been upgraded to version 5.3.
* The auto-generated Rust project created during binary building is now explicitly
licensed to the public domain.
* Derivation of a custom ``libpython`` library archive now sometimes uses pure
Rust code instead of calling external processes. There should be no meaningful
change in behavior except for build output being more concise.
* Auto-generated Rust projects now contain an empty ``[workspace]`` table in their
``Cargo.toml``. This enables auto-generated projects to be nested under an existing
workspace directory without Cargo complaining. This approach is more robust in
the common case where the Rust project isn't part of a larger workspace.
* See https://github.com/indygreg/PyOxidizer/releases/tag/oxidized_importer%2Fpython-oxidized-importer%2F0.6.0 for relevant changes in the `oxidized_importer` extension module.