Skip to content

Releases: pybind/pybind11

Version 2.6.2

27 Jan 03:10
8de7772
Compare
Choose a tag to compare

Minor missing functionality added:

  • enum: add missing Enum.value property. #2739
  • Allow thread termination to be avoided during shutdown for CPython 3.7+ via .disarm for gil_scoped_acquire/gil_scoped_release. #2657

Fixed or improved behavior in a few special cases:

  • Fix bug where the constructor of object subclasses would not throw on being passed a Python object of the wrong type. #2701
  • The type_caster for integers does not convert Python objects with __int__ anymore with noconvert or during the first round of trying overloads. #2698
  • When casting to a C++ integer, __index__ is always called and not considered as conversion, consistent with Python 3.8+. #2801

Build improvements:

  • Setup helpers: extra_compile_args and extra_link_args automatically set by Pybind11Extension are now prepended, which allows them to be overridden by user-set extra_compile_args and extra_link_args. #2808
  • Setup helpers: Don't trigger unused parameter warning. #2735
  • CMake: Support running with --warn-uninitialized active. #2806
  • CMake: Avoid error if included from two submodule directories. #2804
  • CMake: Fix STATIC / SHARED being ignored in FindPython mode. #2796
  • CMake: Respect the setting for CMAKE_CXX_VISIBILITY_PRESET if defined. #2793
  • CMake: Fix issue with FindPython2/FindPython3 not working with pybind11::embed. #2662
  • CMake: mixing local and installed pybind11's would prioritize the installed one over the local one (regression in 2.6.0). #2716

Bug fixes:

  • Fixed segfault in multithreaded environments when using scoped_ostream_redirect. #2675
  • Leave docstring unset when all docstring-related options are disabled, rather than set an empty string. #2745
  • The module key in builtins that pybind11 uses to store its internals changed from std::string to a python str type (more natural on Python 2, no change on Python 3). #2814
  • Fixed assertion error related to unhandled (later overwritten) exception in CPython 3.8 and 3.9 debug builds. #2685
  • Fix py::gil_scoped_acquire assert with CPython 3.9 debug build. #2683
  • Fix issue with a test failing on PyTest 6.2. #2741

Warning fixes:

  • Fix warning modifying constructor parameter 'flag' that shadows a field of 'set_flag' [-Wshadow-field-in-constructor-modified]. #2780
  • Suppressed some deprecation warnings about old-style __init__/__setstate__ in the tests. #2759

Valgrind work:

  • Fix invalid access when calling a pybind11 __init__ on a non-pybind11 class instance. #2755
  • Fixed various minor memory leaks in pybind11's test suite. #2758
  • Resolved memory leak in cpp_function initialization when exceptions occurred. #2756
  • Added a Valgrind build, checking for leaks and memory-related UB, to CI. #2746

Compiler support:

  • Intel compiler was not activating C++14 support due to a broken define. #2679
  • Support ICC and NVIDIA HPC SDK in C++17 mode. #2729
  • Support Intel OneAPI compiler (ICC 20.2) and add to CI. #2573

Version 2.6.1

12 Nov 00:24
f1abf5d
Compare
Choose a tag to compare
  • py::exec, py::eval, and py::eval_file now add the builtins module as "__builtins__" to their globals argument, better matching exec and eval in pure Python. #2616
  • setup_helpers will no longer set a minimum macOS version higher than the current version. #2622
  • Allow deleting static properties. #2629
  • Seal a leak in def_buffer, cleaning up the capture object after the class_ object goes out of scope.
    #2634
  • pybind11_INCLUDE_DIRS was incorrect, potentially causing a regression if it was expected to include PYTHON_INCLUDE_DIRS (please use targets instead). #2636
  • Added parameter names to the py::enum_ constructor and methods, avoiding arg0 in the generated docstrings. #2637
  • Added needs_recompile optional function to the ParallelCompiler helper, to allow a recompile to be skipped based on a user-defined function. #2643

Version 2.6.0

21 Oct 16:20
Compare
Choose a tag to compare

New features:

  • Keyword-only arguments supported in Python 2 or 3 with py::kw_only(). #2100
  • Positional-only arguments supported in Python 2 or 3 with py::pos_only(). #2459
  • py::is_final() class modifier to block subclassing (CPython only). #2151
  • Added py::prepend(), allowing a function to be placed at the beginning of the overload chain. #1131
  • Access to the type object now provided with py::type::of<T>() and py::type::of(h). #2364
  • Perfect forwarding support for methods. #2048
  • Added py::error_already_set::discard_as_unraisable(). #2372
  • py::hash is now public. #2217
  • py::class_<union_type> is now supported. Note that writing to one data member of the union and reading another (type punning) is UB in C++. Thus pybind11-bound enums should never be used for such conversions. #2320.
  • Classes now check local scope when registering members, allowing a subclass to have a member with the same name as a parent (such as an enum). #2335

Code correctness features:

  • Error now thrown when __init__ is forgotten on subclasses. #2152
  • Throw error if conversion to a pybind11 type if the Python object isn't a valid instance of that type, such as py::bytes(o) when py::object o isn't a bytes instance. #2349
  • Throw if conversion to str fails. #2477

API changes:

  • py::module was renamed py::module_ to avoid issues with C++20 when used unqualified, but an alias py::module is provided for backward compatibility. #2489
  • Public constructors for py::module_ have been deprecated; please use pybind11::module_::create_extension_module if you were using the public constructor (fairly rare after PYBIND11_MODULE was introduced). #2552
  • PYBIND11_OVERLOAD* macros and get_overload function replaced by correctly-named PYBIND11_OVERRIDE* and get_override, fixing inconsistencies in the presence of a closing ; in these macros. get_type_overload is deprecated. #2325

Packaging / building improvements:

  • The Python package was reworked to be more powerful and useful. #2433
    • build-setuptools is easier thanks to a new pybind11.setup_helpers module, which provides utilities to use setuptools with pybind11. It can be used via PEP 518, setup_requires, or by directly importing or copying setup_helpers.py into your project.
    • CMake configuration files are now included in the Python package. Use pybind11.get_cmake_dir() or python -m pybind11 --cmakedir to get the directory with the CMake configuration files, or include the site-packages location in your CMAKE_MODULE_PATH. Or you can use the new pybind11[global] extra when you install pybind11, which installs the CMake files and headers into your base environment in the standard location.
    • pybind11-config is another way to write python -m pybind11 if you have your PATH set up.
    • Added external typing support to the helper module, code from import pybind11 can now be type checked. #2588
  • Minimum CMake required increased to 3.4. #2338 and #2370
    • Full integration with CMake's C++ standard system and compile features replaces PYBIND11_CPP_STANDARD.
    • Generated config file is now portable to different Python/compiler/CMake versions.
    • Virtual environments prioritized if PYTHON_EXECUTABLE is not set (venv, virtualenv, and conda) (similar to the new FindPython mode).
    • Other CMake features now natively supported, like CMAKE_INTERPROCEDURAL_OPTIMIZATION, set(CMAKE_CXX_VISIBILITY_PRESET hidden).
    • CUDA as a language is now supported.
    • Helper functions pybind11_strip, pybind11_extension, pybind11_find_import added, see cmake/index.
    • Optional find-python-mode and nopython-mode with CMake. #2370
  • Uninstall target added. #2265 and #2346
  • pybind11_add_module() now accepts an optional OPT_SIZE flag that switches the binding target to size-based optimization if the global build type can not always be fixed to MinSizeRel (except in debug mode, where optimizations remain disabled). MinSizeRel or this flag reduces binary size quite substantially (~25% on some platforms). #2463

Smaller or developer focused features and fixes:

  • Moved mkdoc.py to a new repo, pybind11-mkdoc. There are no longer submodules in the main repo.
  • py::memoryview segfault fix and update, with new py::memoryview::from_memory in Python 3, and documentation. #2223
  • Fix for buffer_info on Python 2. #2503
  • If __eq__ defined but not __hash__, __hash__ is now set to None. #2291
  • py::ellipsis now also works on Python 2. #2360
  • Pointer to std::tuple & std::pair supported in cast. #2334
  • Small fixes in NumPy support. py::array now uses py::ssize_t as first argument type. #2293
  • Added missing signature for py::array. #2363
  • unchecked_mutable_reference has access to operator () and [] when const. #2514
  • py::vectorize is now supported on functions that return void. #1969
  • py::capsule supports get_pointer and set_pointer. #1131
  • Fix crash when different instances share the same pointer of the same type. #2252
  • Fix for py::len not clearing Python's error state when it fails and throws. #2575
  • Bugfixes related to more extensive testing, new GitHub Actions CI. #2321
  • Bug in timezone issue in Eastern hemisphere midnight fixed. #2438
  • std::chrono::time_point now works when the resolution is not the same as the system. #2481
  • Bug fixed where py::array_t could accept arrays that did not match the requested ordering. #2484
  • Avoid a segfault on some compilers when types are removed in Python. #2564
  • py::arg::none() is now also respected when passing keyword arguments. #2611
  • PyPy fixes, PyPy 7.3.x now supported, including PyPy3. (Known issue with PyPy2 and Windows #2596). #2146
  • CPython 3.9.0 workaround for undefined behavior (macOS segfault). #2576
  • CPython 3.9 warning fixes. #2253
  • Improved C++20 support, now tested in CI. #2489 #2599
  • Improved but still incomplete debug Python interpreter support. #2025
  • NVCC (CUDA 11) now supported and tested in CI. #2461
  • NVIDIA PGI compilers now supported and tested in CI. #2475
  • At least Intel 18 now explicitly required when compiling with Intel. #2577
  • Extensive style checking in CI, with pre-commit support. Code modernization, checked by clang-tidy.
  • Expanded docs, including new main page, new installing section, and CMake helpers page, along with over a dozen new sections on existing pages.
  • In GitHub, new docs for contributing and new issue templates.

Version 2.6.0 RC 3

16 Oct 21:43
Compare
Choose a tag to compare
Version 2.6.0 RC 3 Pre-release
Pre-release

Next release candidate.

  • Factory constructor scope fix
  • Support for PyPy3 on Windows 32, added to CI
  • Fixes for C++20, added to CI for Clang, GCC, and MSVC 2019
  • Black formatting for all Python code
  • Allow ABI string overrides from 2.4 (advanced)

Version 2.6.0 RC 2

14 Oct 20:41
Compare
Choose a tag to compare
Version 2.6.0 RC 2 Pre-release
Pre-release

Next release candidate. Changes since RC 1:

Fixed:

  • Python 3.9.0 bug workaround implemented
  • Better support in CMake for packing and cross-compiling
  • Fix for failing py::len leaving error state set
  • Intel 18+ explicitly required, an issue with Intel compilers fixed
  • Custom ipo flags disabled with RelWithDebInfo (use CMAKE_INTERPROCEDURAL_OPTIMIZATION for more control)
  • Possible duplicate linker flags fixed in setup_helpers
  • Changes to py::module_ constructor are no longer provisional.

New features:

  • Static typing support for import pybind11

Version 2.6.0 RC 1

09 Oct 22:21
d46f332
Compare
Choose a tag to compare
Version 2.6.0 RC 1 Pre-release
Pre-release

This is the first release candidate for pybind11 2.6.0. Please see the new features in the changelog, such as revamped CMake and setuptools support, keyword and positional argument support, and a long list of features, fixes, and improvements. Full Python 3.9 support and enhanced C++20 support.

Known issues:

  • py::module_ direct construction provisionally deprecated
  • Removing registered types can cause a segfault - old issue exposed by recent test additions; fix incoming
  • On Python 3.9.0 and macOS, pybind11 may segfault when closing the interpreter after running the test suite

Version 2.6.0 Beta 1

30 Sep 21:18
Compare
Choose a tag to compare
Version 2.6.0 Beta 1 Pre-release
Pre-release

v2.6.0 beta release.