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
pyoxidizer
commands which
prevented them from working without specifying any arguments. This regression
was introduced in 0.20 with the upgrade of theclap
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 variouspython
invocations. 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. 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 aCargo.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 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*.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.