| single |
The Cython language makes writing C extensions for the Python language as
easy as Python itself. Cython is a source code translator based on Pyrex_,
but supports more cutting edge functionality and optimizations.
The Cython language is a superset of the Python language (almost all Python
code is also valid Cython code), but Cython additionally supports optional
static typing to natively call C functions, operate with C++ classes and
declare fast C types on variables and class attributes. This allows the
compiler to generate very efficient C code from Cython code.
This makes Cython the ideal language for writing glue code for external
C/C++ libraries, and for fast C modules that speed up the execution of
Python code.
The newest Cython release can always be downloaded from
https://cython.org/.
Unpack the tarball or zip file, enter the directory, and then run::
pip install .
Note that for one-time builds, e.g. for CI/testing, on platforms that are
not
covered by one of the wheel packages provided on PyPI *and* the pure Python
wheel
that we provide is not used, it is substantially faster than a full source
build
to install an uncompiled (slower) version of Cython with::
NO_CYTHON_COMPILE=true pip install .
.. _Pyrex: https://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
3.2.4 (2026-01-04)
==================
Features added
--------------
* In preparation of Cython 3.3, a new decorator ``@collection_type(tname)
can be used
to advertise an extension type as being a 'sequence' or 'mapping'``.
This currently
only has the effect of setting the Py_TPFLAGS_SEQUENCE flag on the type
or not, but
is provided for convenience to allow using the new decorator already in
Cython 3.2 code.
* Several C++ exception declarations were added to ``libcpp.exceptions``.
(Github issue https://github.com/cython/cython/issues/7389)
Bugs fixed
----------
* Pseudo-literal default values of function arguments like ``arg=str()``
could generate
invalid C code when internally converted into a real literal.
(Github issue https://github.com/cython/cython/issues/6192)
* The pickle serialisation of extension types using the auto_pickle feature
was
larger than necessary since 3.2.0 for types without Python object
attributes.
It is now back to the state before 3.2.0 again.
(Github issue https://github.com/cython/cython/issues/7443)
* Constants are now only made immortal on freethreading Python if they are
not shared.
(Github issue https://github.com/cython/cython/issues/7439)
* ``PyDict_SetDefaultRef()`` is now used when available to avoid temporary
borrowed references.
(Github issue https://github.com/cython/cython/issues/7347)
* Includes all fixes as of Cython 3.1.8.
3.1.8 (2026-01-03):
* Assignment expressions used in comprehensions could look at the wrong
scope,
thus using different variables and different data.
(Github issue https://github.com/cython/cython/issues/6547)
* Some internal C symbols were not declared as static, preventing static
linking
of multiple modules.
Patch by Yury Popov. (Github issue
https://github.com/cython/cython/issues/7310)
* Accidentally using ``except +`` in C mode did not raise a compile error
but generated
invalid C code leading to obscure error messages.
Patch by user202729. (Github issue
https://github.com/cython/cython/issues/6560)
3.1.7 (2025-11-12):
* Unicode characters formatted from C integers with padding, as in
``f"{value:XXc}"``,
could result in invalid Python string objects since Cython 3.1.0.
Also, lone surrogates failed to format in this way.
|