16.0.2
- Workaround bug in libzmq-4.2.0 causing EINVAL on poll.
16.0.1
- Fix erroneous EAGAIN that could happen on async sockets
- Bundle libzmq 4.1.6
16.0
- Support for Python 2.6 and Python 3.2 is dropped. For old Pythons, use
:command:`pip install "pyzmq<16"` to get the last version of pyzmq
that supports these versions.
- Include zmq.h
- Deprecate zmq.Stopwatch. Native Python timing tools can be used
instead.
- Better support for using pyzmq as a Cython library - bundle zmq.h when
pyzmq bundles libzmq as an extension - add
:func:`zmq.get_library_dirs` to find bundled libzmq
- Updates to setup.py for Cython 0.25 compatibility
- Various asyncio/future fixes: - support raw sockets in pollers - allow
cancelling async sends
- Fix :meth:`IOLoop.current` in :mod:`zmq.green`
15.4
- Load bundled libzmq extension with import rather than CDLL, which
should fix some manifest issues in certain cases on Windows.
- Avoid installing asyncio sources on Python 2, which confuses some
tools that run python -m compileall, which reports errors on the
Python 3-only files.
- Bundle msvcp.dll in Windows wheels on CPython 3.5, which should fix
wheel compatibility systems without Visual C++ 2015 redistributable.
- :meth:`zmq.Context.instance` is now threadsafe.
- FIX: sync some behavior in zmq_poll and setting LINGER on
close/destroy with the CFFI backend.
- PERF: resolve send/recv immediately if events are available in async
Sockets
- Async Sockets (asyncio, tornado) now support send_json, send_pyobj,
etc.
- add preliminary support for zmq.DRAFT_API reflecting
ZMQ_BUILD_DRAFT_API, which indicates whether new APIs in prereleases
are available.
15.3
- Bump bundled libzmq to 4.1.5, using tweetnacl for bundled curve
support instead of libsodium
- FIX: include .pxi includes in installation for consumers of Cython API
- FIX: various fixes in new async sockets
- Introduce :mod:`zmq.decorators` API for decorating functions to create
sockets or contexts
- Add :meth:`zmq.Socket.subscribe` and :meth:`zmq.Socket.unsubscribe`
methods to sockets, so that assignment is no longer needed for
subscribing. Verbs should be methods! Assignment is still supported for
backward-compatibility.
- Accept text (unicode) input to z85 encoding, not just bytes
- :meth:`zmq.Context.socket` forwards keyword arguments to the
:class:`Socket` constructor
15.2
- FIX: handle multiple events in a single register call in
:mod:`zmq.asyncio`
- FIX: unicode/bytes bug in password prompt in :mod:`zmq.ssh` on Python 3
- FIX: workaround gevent monkeypatches in garbage collection thread
- update bundled minitornado from tornado-4.3.
- improved inspection by setting binding=True in cython compile options
- add asyncio Authenticator implementation in :mod:`zmq.auth.asyncio`
- workaround overflow bug in libzmq preventing receiving messages larger
than MAX_INT
15.1
- FIX: Remove inadvertant tornado dependency when using
:mod:`zmq.asyncio`
- FIX: 15.0 Python 3.5 wheels didn't work on Windows
- Add GSSAPI support to Authenticators
- Support new constants defined in upcoming libzmq-4.2.dev
15.0
- PyZMQ 15 adds Future-returning sockets and pollers for both
:mod:`asyncio` and :mod:`tornado`.
- add :mod:`asyncio` support via :mod:`zmq.asyncio`
- add :mod:`tornado` future support via :mod:`zmq.eventloop.future`
- trigger bundled libzmq if system libzmq is found to be < 3. System
libzmq 2 can be forced by explicitly requesting --zmq=/prefix/.
14.7.0
Changes:
- Update bundled libzmq to 4.1.2.
- Following the lead of Python 3.5, interrupted system calls will be
retried.
Fixes:
- Fixes for CFFI backend on Python 3 + support for PyPy 3.
- Verify types of all frames in :meth:`~zmq.Socket.send_multipart`
before sending, to avoid partial messages.
- Fix build on Windows when both debug and release versions of libzmq
are found.
- Windows build fixes for Python 3.5.
14.6.0
Changes:
- improvements in :meth:`zmq.Socket.bind_to_random_port`:
- use system to allocate ports by default
- catch EACCES on Windows
- include libsodium when building bundled libzmq on Windows (includes
wheels on PyPI)
- pyzmq no longer bundles external libzmq when making a bdist. You can
use delocate to do this.
Bugfixes:
- add missing :attr:`ndim` on memoryviews of Frames
- allow :func:`copy.copy` and :func:`copy.deepcopy` on Sockets, Contexts
14.5.0
Changes:
- use pickle.DEFAULT_PROTOCOL by default in send_pickle
- with the release of pip-6, OS X wheels are only marked as 10.6-intel,
indicating that they should be installable on any newer or single-arch
Python.
- raise SSHException on failed check of host key
Bugfixes:
- fix method name in utils.wi32.allow_interrupt
- fork-related fixes in garbage collection thread
- add missing import in zmq.__init__, causing failure to import in some
circumstances
14.4.1
======
Bugfixes for 14.4
- SyntaxError on Python 2.6 in zmq.ssh
- Handle possible bug in garbage collection after fork
14.4.0
======
New features:
- Experimental support for libzmq-4.1.0 rc (new constants, plus :func:`zmq.has`).
- Update bundled libzmq to 4.0.5
- Update bundled libsodium to 1.0.0
- Fixes for SSH dialogs when using :mod:`zmq.ssh` to create tunnels
- More build/link/load fixes on OS X and Solaris
- Get Frame metadata via dict access (libzmq 4)
- Contexts and Sockets are context managers (term/close on ``__exit__``)
- Add :class:`zmq.utils.win32.allow_interrupt` context manager for catching SIGINT on Windows
Bugs fixed:
- Bundled libzmq should not trigger recompilation after install on PyPy
14.3.1
======
.. note::
pyzmq-14.3.1 is the last version to include bdists for Python 3.3
Minor bugfixes to pyzmq 14.3:
- Fixes to building bundled libzmq on OS X < 10.9
- Fixes to import-failure warnings on Python 3.4
- Fixes to tests
- Pull upstream fixes to zmq.ssh for ssh multiplexing
14.3.0. From docs/source/changelog.rst:
14.3.0
======
- PyZMQ no longer calls :meth:`Socket.close` or :meth:`Context.term` during process cleanup.
Changes to garbage collection in Python 3.4 make this impossible to do sensibly.
- :meth:`ZMQStream.close` closes its socket immediately, rather than scheduling a timeout.
- Raise the original ImportError when importing zmq fails.
Should be more informative than `no module cffi...`.
.. warning::
Users of Python 3.4 should not use pyzmq < 14.3, due to changes in garbage collection.
14.2.0
======
New Stuff
---------
- Raise new ZMQVersionError when a requested method is not supported by the linked libzmq.
For backward compatibility, this subclasses NotImplementedError.
Bugs Fixed
----------
- Memory leak introduced in pyzmq-14.0 in zero copy.
- OverflowError on 32 bit systems in zero copy.
14.1.0
======
Security
--------
The headline features for 14.1 are adding better support for libzmq's
security features.
- When libzmq is bundled as a Python extension (e.g. wheels, eggs),
libsodium is also bundled (excluding Windows),
ensuring that libzmq security is available to users who install from wheels
- New :mod:`zmq.auth`, implementing zeromq's ZAP authentication,
modeled on czmq zauth.
For more information, see the `examples <https://github.com/zeromq/pyzmq/tree/master/examples/>`_.
Other New Stuff
---------------
- Add PYZMQ_BACKEND for enabling use of backends outside the pyzmq codebase.
- Add :attr:`~.Context.underlying` property and :meth:`~.Context.shadow`
method to Context and Socket, for handing off sockets and contexts.
between pyzmq and other bindings (mainly pyczmq_).
- Add TOS, ROUTER_HANDOVER, and IPC_FILTER constants from libzmq-4.1-dev.
- Add Context option support in the CFFI backend.
- Various small unicode and build fixes, as always.
- :meth:`~.Socket.send_json` and :meth:`~.Socket.recv_json` pass any extra kwargs to ``json.dumps/loads``.
.. _pyczmq: https://github.com/zeromq/pyczmq
Deprecations
------------
- ``Socket.socket_type`` is deprecated, in favor of ``Socket.type``,
which has been available since 2.1.
14.0.1
======
Bugfix release
- Update bundled libzmq to current (4.0.3).
- Fix bug in :meth:`.Context.destroy` with no open sockets.
- Threadsafety fixes in the garbage collector.
- Python 3 fixes in :mod:`zmq.ssh`.
14.0.0
======
* Update bundled libzmq to current (4.0.1).
* Backends are now implemented in ``zmq.backend`` instead of ``zmq.core``.
This has no effect on public APIs.
* Various build improvements for Cython and CFFI backends (PyPy compiles at build time).
* Various GIL-related performance improvements - the GIL is no longer touched from a zmq IO thread.
* Adding a constant should now be a bit easier - only zmq/sugar/constant_names should need updating,
all other constant-related files should be automatically updated by ``setup.py constants``.
* add support for latest libzmq-4.0.1
(includes ZMQ_CURVE security and socket event monitoring).
New stuff
---------
- :meth:`.Socket.monitor`
- :meth:`.Socket.get_monitor_socket`
- :func:`zmq.curve_keypair`
- :mod:`zmq.utils.monitor`
- :mod:`zmq.utils.z85`
either because they themselves are not ready or because a
dependency isn't. This is annotated by
PYTHON_VERSIONS_INCOMPATIBLE= 33 # not yet ported as of x.y.z
or
PYTHON_VERSIONS_INCOMPATIBLE= 33 # py-foo, py-bar
respectively, please use the same style for other packages,
and check during updates.
Use versioned_dependencies.mk where applicable.
Use REPLACE_PYTHON instead of handcoded alternatives, where applicable.
Reorder Makefile sections into standard order, where applicable.
Remove PYTHON_VERSIONS_INCLUDE_3X lines since that will be default
with the next commit.
Whitespace cleanups and other nits corrected, where necessary.
================
Changes in PyZMQ
================
2.2.0.1
=======
This is a tech-preview release, to try out some new features.
It is expected to be short-lived, as there are likely to be issues to iron out,
particularly with the new pip-install support.
Experimental New Stuff
----------------------
These features are marked 'experimental', which means that their APIs are not set in stone,
and may be removed or changed in incompatible ways in later releases.
Threadsafe ZMQStream
********************
With the IOLoop inherited from tornado, there is exactly one method that is threadsafe:
:meth:`.IOLoop.add_callback`. With this release, we are trying an experimental option
to pass all IOLoop calls via this method, so that ZMQStreams can be used from one thread
while the IOLoop runs in another. To try out a threadsafe stream:
.. sourcecode:: python
stream = ZMQStream(socket, threadsafe=True)
pip install pyzmq
*****************
PyZMQ should now be pip installable, even on systems without libzmq.
In these cases, when pyzmq fails to find an appropriate libzmq to link against,
it will try to build libzmq as a Python extension.
This work is derived from `pyzmq_static <https://github.com/brandon-rhodes/pyzmq-static>`_.
To this end, PyZMQ source distributions include the sources for libzmq (2.2.0) and libuuid (2.21),
both used under the LGPL.
zmq.green
*********
The excellent `gevent_zeromq <https://github.com/traviscline/gevent_zeromq>`_ socket
subclass which provides `gevent <http://www.gevent.org/>`_ compatibility has been merged as
:mod:`zmq.green`.
.. seealso::
:ref:`zmq_green`
Bugs fixed
----------
* TIMEO sockopts are properly included for libzmq-2.2.0
* avoid garbage collection of sockets after fork (would cause ``assert (mailbox.cpp:79)``).
2.2.0
=====
Some effort has gone into refining the pyzmq API in this release to make it a model for
other language bindings. This is principally made in a few renames of objects and methods,
all of which leave the old name for backwards compatibility.
.. note::
As of this release, all code outside ``zmq.core`` is BSD licensed (where
possible), to allow more permissive use of less-critical code and utilities.
Name Changes
------------
* The :class:`~.Message` class has been renamed to :class:`~.Frame`, to better match other
zmq bindings. The old Message name remains for backwards-compatibility. Wherever pyzmq
docs say "Message", they should refer to a complete zmq atom of communication (one or
more Frames, connected by ZMQ_SNDMORE). Please report any remaining instances of
Message==MessagePart with an Issue (or better yet a Pull Request).
* All ``foo_unicode`` methods are now called ``foo_string`` (``_unicode`` remains for
backwards compatibility). This is not only for cross-language consistency, but it makes
more sense in Python 3, where native strings are unicode, and the ``_unicode`` suffix
was wedded too much to Python 2.
Other Changes and Removals
--------------------------
* ``prefix`` removed as an unused keyword argument from :meth:`~.Socket.send_multipart`.
* ZMQStream :meth:`~.ZMQStream.send` default has been changed to `copy=True`, so it matches
Socket :meth:`~.Socket.send`.
* ZMQStream :meth:`~.ZMQStream.on_err` is deprecated, because it never did anything.
* Python 2.5 compatibility has been dropped, and some code has been cleaned up to reflect
no-longer-needed hacks.
* Some Cython files in :mod:`zmq.core` have been split, to reduce the amount of
Cython-compiled code. Much of the body of these files were pure Python, and thus did
not benefit from the increased compile time. This change also aims to ease maintaining
feature parity in other projects, such as
`pyzmq-ctypes <https://github.com/svpcom/pyzmq-ctypes>`_.
New Stuff
---------
* :class:`~.Context` objects can now set default options when they create a socket. These
are set and accessed as attributes to the context. Socket options that do not apply to a
socket (e.g. SUBSCRIBE on non-SUB sockets) will simply be ignored.
* :meth:`~.ZMQStream.on_recv_stream` has been added, which adds the stream itself as a
second argument to the callback, making it easier to use a single callback on multiple
streams.
* A :attr:`~Frame.more` boolean attribute has been added to the :class:`~.Frame` (née
Message) class, so that frames can be identified as terminal without extra queires of
:attr:`~.Socket.rcvmore`.
Experimental New Stuff
----------------------
These features are marked 'experimental', which means that their APIs are not
set in stone, and may be removed or changed in incompatible ways in later releases.
* :mod:`zmq.web` added for load-balancing requests in a tornado webapp with zeromq.
Remove devel/py-ctypes (only needed by and supporting python24).
Remove PYTHON_VERSIONS_ACCEPTED and PYTHON_VERSIONS_INCOMPATIBLE
lines that just mirror defaults now.
Miscellaneous cleanup while editing all these files.
This should fix a build failure, where it failed to
find the installed version of zmq. (It worked for me because
I had /usr/pkg/lib in /etc/ld.so.conf.)
Bump PKGREVISION to 1.
PyZMQ is ostensibly the Python bindings for ZeroMQ, but the project,
following Python's 'batteries included' philosophy, provides more than
just Python methods objects for calling into the ZeroMQ C++ library.