v2.8.0
版本发布时间: 2021-10-05 05:18:40
pybind/pybind11最新发布版本:v2.13.6(2024-09-14 08:33:41)
New features:
- Added
py::raise_from
to enable chaining exceptions. #3215 - Allow exception translators to be optionally registered local to a module instead of applying globally across all pybind11 modules. Use
register_local_exception_translator(ExceptionTranslator&& translator)
instead ofregister_exception_translator(ExceptionTranslator&& translator)
to keep your exception remapping code local to the module. #2650 - Add
make_simple_namespace
function for instantiating PythonSimpleNamespace
objects. #2840 -
pybind11::scoped_interpreter
andinitialize_interpreter
have new arguments to allowsys.argv
initialization. #2341 - Allow Python builtins to be used as callbacks in CPython. #1413
- Added
view
to view arrays with a different datatype. #987 - Implemented
reshape
on arrays. #984 - Enable defining custom
__new__
methods on classes by fixing bug preventing overriding methods if they have non-pybind11 siblings. #3265 - Add
make_value_iterator()
, and fixmake_key_iterator()
to return references instead of copies. #3293 - Improve the classes generated by
bind_map
: #3310- Change
.items
from an iterator to a dictionary view. - Add
.keys
and.values
(both dictionary views). - Allow
__contains__
to take any object.
- Change
-
pybind11::custom_type_setup
was added, for customizing thePyHeapTypeObject
corresponding to a class, which may be useful for enabling garbage collection support, among other things. #3287
Changes:
- Set
__file__
constant when runningeval_file
in an embedded interpreter. #3233 - Python objects and (C++17)
std::optional
now accepted inpy::slice
constructor. #1101 - The pybind11 proxy types
str
,bytes
,bytearray
,tuple
,list
now consistently support passingssize_t
values for sizes and indexes. Previously, onlysize_t
was accepted in several interfaces. #3219 - Avoid evaluating
PYBIND11_TLS_REPLACE_VALUE
arguments more than once. #3290
Fixes:
- Bug fix: enum value's
__int__
returning non-int when underlying type is bool or of char type #1334 - Fixes bug in setting error state in Capsule's pointer methods. #3261
- A long-standing memory leak in
py::cpp_function::initialize
was fixed. #3229 - Fixes thread safety for some
pybind11::type_caster
which require lifetime extension, such as forstd::string_view
. #3237 - Restore compatibility with gcc 4.8.4 as distributed by ubuntu-trusty, linuxmint-17. #3270
Build system improvements:
- Fix regression in CMake Python package config: improper use of absolute path. #3144
- Cached Python version information could become stale when CMake was re-run with a different Python version. The build system now detects this and updates this information. #3299
- Specified UTF8-encoding in setup.py calls of open(). #3137
- Fix a harmless warning from CMake 3.21 with the classic Python discovery. #3220
- Eigen repo and version can now be specified as cmake options. #3324
Backend and tidying up:
- Reduced thread-local storage required for keeping alive temporary data for type conversion to one key per ABI version, rather than one key per extension module. This makes the total thread-local storage required by pybind11 2 keys per ABI version. #3275
- Optimize NumPy array construction with additional moves. #3183
- Conversion to
std::string
andstd::string_view
now avoids making an extra copy of the data on Python >= 3.3. #3257 - Remove const modifier from certain C++ methods on Python collections (
list
,set
,dict
) such as (clear()
,append()
,insert()
, etc...) and annotated them withpy-non-const
. - Enable readability
clang-tidy-const-return
and remove useless consts. #3254 #3194 - The clang-tidy
google-explicit-constructor
option was enabled. #3250 - Mark a pytype move constructor as noexcept (perf). #3236
- Enable clang-tidy check to guard against inheritance slicing. #3210
- Legacy warning suppression pragma were removed from eigen.h. On Unix platforms, please use -isystem for Eigen include directories, to suppress compiler warnings originating from Eigen headers. Note that CMake does this by default. No adjustments are needed for Windows. #3198
- Format pybind11 with isort consistent ordering of imports #3195
- The warnings-suppression "pragma clamp" at the top/bottom of pybind11 was removed, clearing the path to refactoring and IWYU cleanup. #3186
- Enable most bugprone checks in clang-tidy and fix the found potential bugs and poor coding styles. #3166
- Add
clang-tidy-readability
rules to make boolean casts explicit improving code readability. Also enabled other misc and readability clang-tidy checks. #3148 - Move object in
.pop()
for list. #3116