Release Release 2.5.0 · pythonnet/pythonnet

⚠️ This release will be the last one supporting Python 2 and non-.NET-Standard builds.

This version improves performance on benchmarks significantly compared to 2.3 and includes various additions and improvements to the library.

Added

  • Automatic NuGet package generation in appveyor and local builds
  • Function that sets Py_NoSiteFlag to 1.
  • Support for Jetson Nano.
  • Support for __len__ for .NET classes that implement ICollection
  • PyExport attribute to hide .NET types from Python
  • PythonException.Format method to format exceptions the same as
    traceback.format_exception
  • Runtime.None to be able to pass None as parameter into Python from .NET
  • PyObject.IsNone() to check if a Python object is None in .NET.
  • Support for Python 3.8
  • Codecs as the designated way to handle automatic conversions between
    .NET and Python types

Changed

  • Added argument types information to "No method matches given arguments" message
  • Moved wheel import in setup.py inside of a try/except to prevent pip collection failures
  • Removes PyLong_GetMax and PyClass_New when targetting Python3
  • Improved performance of calls from Python to C#
  • Added support for converting python iterators to C# arrays
  • Changed usage of the obsolete function
    GetDelegateForFunctionPointer(IntPtr, Type) to
    GetDelegateForFunctionPointer<TDelegate>(IntPtr)
  • When calling C# from Python, enable passing argument of any type to a
    parameter of C# type object by wrapping it into PyObject instance.
    ([#881][i881])
  • Added support for kwarg parameters when calling .NET methods from Python
  • Changed method for finding MSBuild using vswhere
  • Reworked Finalizer. Now objects drop into its queue upon finalization,
    which is periodically drained when new objects are created.
  • Marked Runtime.OperatingSystemName and Runtime.MachineName as
    Obsolete, should never have been public in the first place. They also
    don't necessarily return a result that matches the platform module's.
  • Unconditionally depend on pycparser for the interop module generation

Fixed

  • Fixed runtime that fails loading when using pythonnet in an environment
    together with Nuitka
  • Fixes bug where delegates get casts (dotnetcore)
  • Determine size of interpreter longs at runtime
  • Handling exceptions ocurred in ModuleObject's getattribute
  • Fill __classcell__ correctly for Python subclasses of .NET types
  • Fixed issue with params methods that are not passed an array.
  • Use UTF8 to encode strings passed to PyRun_String on Python 3

Acknowledgements

These authors have contributed to this release: