PyOxidizer 0.21.0
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
pyoxidizercommands which prevented them from working without specifying any arguments. This regression was introduced in 0.20 with the upgrade of theclapcrate 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, andPythonPackageResourceStarlark types. (#561) - We no longer panic when encountering invalid UTF-8 when reading process output
of various
pythoninvocations. Previously, invocations ofpip,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.
PythonExecutableStarlark 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 thePythonExecutable.licenses_filenameattribute.- A new
pyoxidizer rust-project-licensingcommand 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_licensingStarlark method for registering the licensing information for aCargo.tomlRust project. This can be used by Rust projects wishing to have their licensing information captured.
-
Initial support for
aarch64-unknown-linux-gnuPython 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
PythonInterpreterConfigdocumentation has been changed to refer topyembed_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 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*.appdirectories. 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
libpythonlibrary 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 theirCargo.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_importerextension module.