All Versions
29
Latest Version
Avg Release Cycle
168 days
Latest Release
1109 days ago
Changelog History
Page 1
Changelog History
Page 1
-
v3.0.1 Changes
November 03, 2022โ Added
- ๐ Support for Python 3.11
๐ Changed
- Allow decoders to override conversion of types derived from primitive types
๐ Fixed
- ๐ Fixed objects leaking when Python attached event handlers to them even if they were later removed
- ๐ Fixed
PyIntconversion toBigIntegerandSystem.Stringproduced incorrect result for values between 128 and 255. - ๐ Fixed implementing a generic interface with a Python class
-
v3.0.0 Changes
September 29, 2022โ Added
- Ability to instantiate new .NET arrays using
Array[T](dim1, dim2, ...)syntax - ๐ Python operator method will call C# operator method for supported binary and unary operators ([#1324][p1324]).
- Add GetPythonThreadID and Interrupt methods in PythonEngine
- Ability to implement delegates with
refandoutparameters in Python, by returning the modified parameter values in a tuple. ([#1355][i1355]) - Ability to override .NET methods that have
outorrefin Python by returning the modified parameter values in a tuple. ([#1481][i1481]) -
PyType- a wrapper for Python type objects, that also permits creating new heap types fromTypeSpec - ๐ป Improved exception handling:
- exceptions can now be converted with codecs
-
InnerExceptionand__cause__are propagated properly
-
__name__and__signature__to reflected .NET methods - .NET collection types now implement standard Python collection interfaces from
collections.abc. ๐ See [Mixins/collections.py](src/runtime/Mixins/collections.py). - you can cast objects to generic .NET interfaces without specifying generic arguments as long as there is no ambiguity.
- .NET arrays implement Python buffer protocol
- Python integer interoperability with
System.Numerics.BigInteger - Python.NET will correctly resolve .NET methods, that accept
PyList,PyInt, and otherPyObjectderived types when called from Python. - .NET classes, that have
__call__method are callable from Python -
PyIterabletype, that wraps any iterable object in Python - ๐
PythonEngineproperties for supported Python versions:MinSupportedVersion,MaxSupportedVersion, andIsSupportedVersion - ๐ง The runtime that is loaded on
import clrcan now be configured via environment variables
๐ Changed
- ๐ Drop support for Python 2, 3.4, 3.5, and 3.6
-
wchar_tsize akaRuntime.UCSis now determined at runtime -
clr.AddReferencemay now throw errors besidesFileNotFoundException, that provide more details about the cause of the failure -
clr.AddReferenceno longer adds ".dll" implicitly -
PyIter(PyObject)constructor replaced with staticPyIter.GetIter(PyObject)method - Python runtime can no longer be shut down if the Python error indicator is set, as it would have unpredictable behavior
- BREAKING: Return values from .NET methods that return an interface are now automatically
wrapped in that interface. This is a breaking change for users that rely on being
able to access members that are part of the implementation class, but not the
interface. Use the new
__implementation__or__raw_implementation__properties to if you need to "downcast" to the implementation class. - BREAKING:
==and!=operators onPyObjectinstances now use Python comparison (previously was equivalent toobject.ReferenceEquals(,)) - BREAKING: Parameters marked with
ParameterAttributes.Outare no longer returned in addition to the regular method return value (unless they are passed withreforoutkeyword). - ๐ BREAKING: Drop support for the long-deprecated CLR.* prefix.
-
PyObjectnow implementsIEnumerable<PyObject>in addition toIEnumerable - floating point values passed from Python are no longer silently truncated when .NET expects an integer [#1342][i1342]
- More specific error messages for method argument mismatch
- members of
PyObjectinherited fromSystem.Object andDynamicObject` now autoacquire GIL - BREAKING: when inheriting from .NET types in Python if you override
__init__you must explicitly call base constructor usingsuper().__init__(.....). Not doing so will lead to undefined behavior. - BREAKING: most
PyScopemethods will never returnnull. Instead,PyObjectNonewill be returned. - BREAKING:
PyScopewas renamed toPyModule - BREAKING: Methods with
reforoutparameters and void return type return a tuple of only therefandoutparameters. - BREAKING: to call Python from .NET
Runtime.PythonDLLproperty must be set to Python DLL name or the DLL must be loaded in advance. This must be done before calling any other Python.NET functions. - ๐ BREAKING:
PyObject.Length()now raises aPythonExceptionwhen object does not support a concept of length. - BREAKING: disabled implicit conversion from C# enums to Python
intand back. One must now either use enum members (e.g.MyEnum.Option), or use enum constructor (e.g.MyEnum(42)orMyEnum(42, True)whenMyEnumdoes not have a member with value 42). - BREAKING: disabled implicit conversion from Python objects implementing sequence protocol to
.NET arrays when the target .NET type is
System.Object. The conversion is still attempted when the target type is aSystem.Array. - Sign Runtime DLL with a strong name
- Implement loading through
clr_loaderinstead of the includedClrModule, enables support for .NET Core - BREAKING: .NET and Python exceptions are preserved when crossing Python/.NET boundary
- BREAKING: custom encoders are no longer called for instances of
System.Type - โช
PythonException.Restoreno longer clearsPythonExceptioninstance. - Replaced the old
__import__hook hack with a PEP302-style Meta Path Loader - BREAKING: Names of .NET types (e.g.
str(__class__)) changed to better support generic types - BREAKING: overload resolution will no longer prefer basic types. Instead, first matching overload will be chosen.
- BREAKING: acquiring GIL using
Py.GILno longer forcesPythonEngineto initialize - BREAKING:
ExecandEvalfromPythonEngineno longer accept raw pointers. - BREAKING: .NET collections and arrays are no longer automatically converted to
Python collections. Instead, they implement standard Python
collection interfaces from
collections.abc. ๐ See [Mixins/collections.py](src/runtime/Mixins/collections.py). - BREAKING: When trying to convert Python
inttoSystem.Object, result will be of typePyIntinstead ofSystem.Int32due to possible loss of information. Pythonfloatwill continue to be converted toSystem.Double. - BREAKING: Python.NET will no longer implicitly convert types like
numpy.float64, that implement__float__toSystem.SingleandSystem.Double. An explicit conversion is required on Python or .NET side. - BREAKING:
PyObject.GetHashCodecan fail. - BREAKING: Python.NET will no longer implicitly convert any Python object to
System.Boolean. - 0๏ธโฃ BREAKING:
PyObject.GetAttr(name, default)now only ignoresAttributeError(previously ignored all exceptions). - BREAKING:
PyObjectno longer implementsIEnumerable<PyObject>. Instead,PyIterabledoes that. - BREAKING:
IPyObjectDecoder.CanDecodeobjectTypeparameter type changed fromPyObjecttoPyType
๐ Fixed
- Fix incorrect dereference of wrapper object in
tp_repr, which may result in a program crash - ๐ Fixed parameterless .NET constructor being silently called when a matching constructor overload is not found ([#238][i238])
- Fix incorrect dereference in params array handling
- ๐ Fixes issue with function resolution when calling overloaded function with keyword arguments from python ([#1097][i1097])
- Fix
object[]parameters taking precedence when should not in overload resolution - ๐ Fixed a bug where all .NET class instances were considered Iterable
- Fix incorrect choice of method to invoke when using keyword arguments.
- Fix non-delegate types incorrectly appearing as callable.
- Indexers can now be used with interface objects
- ๐ Fixed a bug where indexers could not be used if they were inherited
- Made it possible to use
__len__also onICollection<>interface objects - ๐ Fixed issue when calling PythonException.Format where another exception would be raise for unnormalized exceptions
- Made it possible to call
ToString,GetHashCode, andGetTypeon inteface objects - ๐ Fixed objects returned by enumerating
PyObjectbeing disposed too soon - Incorrectly using a non-generic type with type parameters now produces a helpful Python error instead of throwing NullReferenceException
- ๐ฉ
importmay now raise errors with more detail than "No module named X" - ๐ป Exception stacktraces on
PythonException.StackTraceare now properly formatted - Providing an invalid type parameter to a generic type or method produces a helpful Python error
- Empty parameter names (as can be generated from F#) do not cause crashes
- Unicode strings with surrogates were truncated when converting from Python
- ๐
Reloadmode now supports generic methods (previously Python would stop seeing them after reload) - ๐ Temporarily fixed issue resolving method overload when method signature has
outparameters ([#1672](i1672)) - 0๏ธโฃ Decimal default parameters are now correctly taken into account
โ Removed
- ๐
ShutdownModehas been removed. The only shutdown mode supported now is an equivalent ofShutdownMode.Reload. There is no need to specify it. - implicit assembly loading (you have to explicitly
clr.AddReferencebefore doing import) - ๐ป messages in
PythonExceptionno longer start with exception type -
PyScopeManager,PyScopeException,PyScope(usePyModuleinstead) - ๐ support for .NET Framework 4.0-4.6; Mono before 5.4. Python.NET now requires .NET Standard 2.0 ๐ (see the matrix)
- Ability to instantiate new .NET arrays using
-
v2.5.2 Changes
February 05, 2021๐ Bugfix release.
๐ Fixed
- Fix
object[]parameters taking precedence when should not in overload resolution - Empty parameter names (as can be generated from F#) do not cause crashes
- Fix
-
v2.5.1 Changes
June 18, 2020๐ Backports two reference counting bugfixes from
master.๐ Many thanks two the reporters who also provided the fixes:
-
v2.5.0 Changes
June 14, 2020๐ > โ ๏ธ 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_NoSiteFlagto 1. - ๐ Support for Jetson Nano.
- Support for
__len__for .NET classes that implement ICollection PyExportattribute to hide .NET types from PythonPythonException.Formatmethod to format exceptions the same as
traceback.format_exceptionRuntime.Noneto be able to passNoneas parameter into Python from .NETPyObject.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_GetMaxandPyClass_Newwhen 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# typeobjectby wrapping it intoPyObjectinstance.
([#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.OperatingSystemNameandRuntime.MachineNameas
Obsolete, should never have beenpublicin the first place. They also
don't necessarily return a result that matches theplatformmodule's. - ๐ Unconditionally depend on
pycparserfor 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_Stringon Python 3
Acknowledgements
๐ These authors have contributed to this release:
-
v2.5.0-rc2 Changes
June 07, 2020๐ This version improves performance on benchmarks significantly compared to 2.3.
โ Added
- ๐ Automatic NuGet package generation in appveyor and local builds
- Function that sets
Py_NoSiteFlagto 1. - ๐ Support for Jetson Nano.
- Support for
__len__for .NET classes that implement ICollection -
PyExportattribute to hide .NET types from Python -
PythonException.Formatmethod to format exceptions the same astraceback.format_exception -
Runtime.Noneto be able to passNoneas 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_GetMaxandPyClass_Newwhen 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)toGetDelegateForFunctionPointer<TDelegate>(IntPtr) - When calling C# from Python, enable passing argument of any type to a
parameter of C# type
objectby wrapping it intoPyObjectinstance. ([#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.OperatingSystemNameandRuntime.MachineNameasObsolete, should never have beenpublicin the first place. They also don't necessarily return a result that matches theplatformmodule's.
๐ 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_Stringon Python 3
-
v2.5.0-rc1
May 18, 2020 -
v2.4.0 Changes
May 03, 2019โ Added
- ๐ Added support for embedding python into dotnet core 2.0 (NetStandard 2.0)
- ๐ท Added new build system (pythonnet.15.sln) based on dotnetcore-sdk/xplat(crossplatform msbuild). Currently there two side-by-side build systems that produces the same output (net40) from the same sources. After a some transition time, current (mono/ msbuild 14.0) build system will be removed.
- โฌ๏ธ NUnit upgraded to 3.7 (eliminates travis-ci random bug)
- Added C#
PythonEngine.AddShutdownHandlerto help client code clean up on shutdown. - Added
clr.GetClrType([#432][i432])([#433][p433]) - Allowed passing
Nonefor nullable args ([#460][p460]) - Added keyword arguments based on C# syntax for calling CPython methods ([#461][p461])
- Catches exceptions thrown in C# iterators (yield returns) and rethrows them in python ([#475][i475])([#693][p693])
- Implemented GetDynamicMemberNames() for PyObject to allow dynamic object members to be visible in the debugger ([#443][i443])([#690][p690])
- ๐ Incorporated reference-style links to issues and pull requests in the CHANGELOG ([#608][i608])
- ๐ Added PyObject finalizer support, Python objects referred by C# can be auto collect now ([#692][p692]).
- Added detailed comments about aproaches and dangers to handle multi-app-domains ([#625][p625])
- ๐ Python 3.7 support, builds and testing added. Defaults changed from Python 3.6 to 3.7 ([#698][p698])
- Added support for C# types to provide
__repr__([#680][p680])
๐ Changed
- PythonException included C# call stack
- ๐ป Reattach python exception traceback information (#545)
- ๐ PythonEngine.Intialize will now call
Py_InitializeExwith a default value of 0, so signals will not be configured by default on embedding. This is different from the previous behaviour, wherePy_Initializewas called instead, which sets initSigs to 1. ([#449][i449]) - ๐จ Refactored MethodBinder.Bind in preparation to make it extensible (#829)
- When calling C# from Python, enable passing argument of any type to a parameter of C# type
objectby wrapping it intoPyObjectinstance. ([#881][i881]) - ๐ Look for installed Windows 10 sdk's during installation instead of relying on specific versions.
๐ Fixed
- ๐ Fixed secondary PythonEngine.Initialize call, all sensitive static variables now reseted. This is a hidden bug. Once python cleaning up enough memory, objects from previous engine run becomes corrupted. ([#534][p534])
- ๐ Fixed Visual Studio 2017 compat ([#434][i434]) for setup.py
- ๐ Fixed crashes when integrating pythonnet in Unity3d ([#714][i714]), related to unloading the Application Domain
- Fixed interop methods with Py_ssize_t. NetCoreApp 2.0 is more sensitive than net40 and requires this fix. ([#531][p531])
- ๐ Fixed crash on exit of the Python interpreter if a python class
derived from a .NET class has a
__namespace__or__assembly__attribute ([#481][i481]) - ๐ Fixed conversion of 'float' and 'double' values ([#486][i486])
- ๐ Fixed 'clrmethod' for python 2 ([#492][i492])
- ๐ Fixed double calling of constructor when deriving from .NET class ([#495][i495])
- ๐ Fixed
clr.GetClrTypewhen iterating overSystemmembers ([#607][p607]) - ๐ Fixed
LockRecursionExceptionwhen loading assemblies ([#627][i627]) - ๐ Fixed errors breaking .NET Remoting on method invoke ([#276][i276])
- ๐ Fixed PyObject.GetHashCode ([#676][i676])
- Fix memory leaks due to spurious handle incrementation ([#691][i691])
- Fix spurious assembly loading exceptions from private types ([#703][i703])
- Fix inheritance of non-abstract base methods ([#755][i755])
-
v2.4.0-rc2
April 07, 2019 -
v2.4.0-rc1 Changes
March 06, 2019โ Added
- โ Added support for embedding python into dotnet core 2.0 (NetStandard 2.0)
- โ Added new build system (pythonnet.15.sln) based on dotnetcore-sdk/xplat(crossplatform msbuild).
๐ท Currently there two side-by-side build systems that produces the same output (net40) from the same sources.
๐ท After a some transition time, current (mono/ msbuild 14.0) build system will be removed. - โฌ๏ธ NUnit upgraded to 3.7 (eliminates travis-ci random bug)
- โ Added C#
PythonEngine.AddShutdownHandlerto help client code clean up on shutdown. - โ Added
clr.GetClrType(#432)(#433) - ๐ Allowed passing
Nonefor nullable args (#460) - โ Added keyword arguments based on C# syntax for calling CPython methods (#461)
- Catches exceptions thrown in C# iterators (yield returns) and rethrows them in python (#475)(#693)
- Implemented GetDynamicMemberNames() for PyObject to allow dynamic object members to be visible in the debugger (#443)(#690)
- ๐ Incorporated reference-style links to issues and pull requests in the CHANGELOG (#608)
- โ Added detailed comments about aproaches and dangers to handle multi-app-domains (#625)
- ๐ Python 3.7 support, builds and testing added. Defaults changed from Python 3.6 to 3.7 ([#698][p698])
๐ Changed
- ๐ป Reattach python exception traceback information (#545)
- ๐ PythonEngine.Intialize will now call
Py_InitializeExwith a default value of 0, so signals will not be configured by default on embedding. This is different from the previous behaviour, wherePy_Initializewas called instead, which sets initSigs to 1. (#449)
๐ Fixed
- ๐ Fixed secondary PythonEngine.Initialize call, all sensitive static variables now reseted.
This is a hidden bug. Once python cleaning up enough memory, objects from previous engine run becomes corrupted. (#534) - ๐ Fixed Visual Studio 2017 compat (#434) for setup.py
- ๐ Fixed crashes when integrating pythonnet in Unity3d (#714),
related to unloading the Application Domain - Fixed interop methods with Py_ssize_t. NetCoreApp 2.0 is more sensitive than net40 and requires this fix. (#531)
- ๐ Fixed crash on exit of the Python interpreter if a python class
derived from a .NET class has a__namespace__or__assembly__
attribute (#481) - ๐ Fixed conversion of 'float' and 'double' values (#486)
- ๐ Fixed 'clrmethod' for python 2 (#492)
- ๐ Fixed double calling of constructor when deriving from .NET class (#495)
- ๐ Fixed
clr.GetClrTypewhen iterating overSystemmembers (#607) - ๐ Fixed
LockRecursionExceptionwhen loading assemblies (#627) - ๐ Fixed errors breaking .NET Remoting on method invoke (#276)
- ๐ Fixed PyObject.GetHashCode (#676)
- ๐ Fix memory leaks due to spurious handle incrementation ([#691][i691])
- ๐ Fix spurious assembly loading exceptions from private types ([#703][i703])
- ๐ Fix inheritance of non-abstract base methods (#755)