Skip to content

PyOxidizer 0.21.0

Compare
Choose a tag to compare
@indygreg indygreg released this 05 Jun 04:35

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 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.