NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4311 most downloaded on PyPI
Remote Python Call (RPyC) is a transparent and symmetric distributed computing library
Last release 1 years ago
18 Apr 2025
Ships fairly regularly
a new release about every 5 months
Nearly every release is documented
notes for 28 of 29 stable releases
1 version withdrawn
withdrawn after publishing
15 years old
30 releases · first in 2011
Nothing published for this version
Minor fixes to class module id packs and related unittest assertions
6.0.0 Date: 2024-02-23 #551 Resolves security issue that results in RCE. The fix breaks backwards compatibility for those that rely on the __array__ a
One column per quarter.
Date: 2024-02-23
__array__ attribute used by numpy. This RCE is only exploitable when the server-side gets the attribute __array__ and calls it (e.g., np.array(x)). This issues effects all versions since major release 4.While the fix for thread binding is not backwards compatible, it only impacts people using an experimental feature. Hence, I did a patch version bump.
Date: 2023-02-21
Thread binding logic is still very experimental. Feel free to provide feedback, contributions, or alternative design options.
Date: 2022-11-25
ModuleNamespaceThread binding logic is still very experimental. Feel free to provide feedback, contributions, or alternative design options.
5.2.3 ===== Date: 2022-08-03 - #503 rpyc_classic.py and rpyc_registry.py are tracked by pyproject.toml and should resolve now. Moreover, they can now
Date: 2022-08-03
rpyc_classic.py and rpyc_registry.py are tracked by pyproject.toml and should resolve now. Moreover, they can now be resolved without their file suffixes as well.Updated CHANGELOG.rst and version for release 5.2.2
Updated CHANGELOG.rst and version for release 5.2.2
5.2.0 was skipped due to PyPi not allowing file name reuse
Date: 2022-07-30
BgServingThread serve and sleep intervals to be customizedhasattr_static on every check_attr` call--mode CLI argument for rpyc_registryAttributeErrors raised by exposed descriptors5.2.0 was skipped due to PyPi not allowing file name reuse
Added types.MappingProxyType to builtin_types #470
types.MappingProxyType to builtin_types #470auto_register #445chunk_size parameter for download_dir #433Fixed unexpected behavior when using inspect.isfunction #426
Deprecated Python 2 support to coincide with it's EOL
Backwards Incompatible:
Improvements:
docker/docker-compose.yml for Python 3.6, 3.7, 3.8, 3.9, and 3.10 containers to improve local workflowconnect_multiprocess and connect_thread #412Date: 12.26.2020
RPyC 5.0.0 cannot teleport functions to earlier versions
Deprecated Python 2 support to coincide with it's EOL
Server hostname default supports IPv4 and IPv6 by using the wildcard address #425
Added docker/docker-compose.yml for Python 3.6, 3.7, 3.8, 3.9, and 3.10 containers to improve local workflow
Fixed pickle failure on windows for connect_multiprocess and connect_thread #412
Fixed teleport function behavior for keyword-only arguments with default #422
Improved documentation on custom exception handling
Fixed IPv6 support for server #407
Added a simple asynchronous service example #400
Fixed mutable object used as kwarg for Server ctor
Merged 3.7 and 3.8 teleportatio compat enhancement #371
is_py_* for 3.9Performance improvements: #366 and #351
propagate_KeyboardInterrupt_locally #364netref.__class__ #355Fixed CVE-2019-16328 which was caused by a missing protocol security check.
Date: 10.03.2019
Fixed CVE-2019-16328 which was caused by a missing protocol security check
Fixed RPyC over RPyC for mutable parameters and extended unit testing for #346
Fixed netref.class_factory id_pack usage per #339 and added test cases
Release RPyC 4.1.1
Note
Added connection back-off and attempts for congested workloads
Release RPyC 4.1.0
Note
Date: 05.25.2019
Added connection back-off and attempts for congested workloads
Fixed minor resource leak for ForkingServer (#304)
Cross-connection instance check for cached netref classes (#316)
Hashing fixed (#324)
New ID Pack convention breaks compatibility between a client/server >= 4.10 with a client/server < 4.10
fix default hostname for ipv6 in rpyc_classic.py
Date: 04.08.2018
fix default hostname for ipv6 in rpyc_classic.py (#277)
fix ThreadPoolServer not working (#283)
fix ValueError during install due to absolute PATH in SOURCES.txt (#276_)
Date: 12.06.2018
fix ValueError during install due to absolute PATH in SOURCES.txt (#276)
This release brings a few minor backward incompatibilities, so be sure to read on before upgrading. However, fear not: the ones that are most likely r…
Date: 11.06.2018
This release brings a few minor backward incompatibilities, so be sure to read on before upgrading. However, fear not: the ones that are most likely relevant to you have a relatively simple migration path.
classic.teleport_function now executes the function in the connection's namespace by default. To get the old behaviour, use teleport_function(conn, func, conn.modules[func.__module__].__dict__) instead.
Changed signature of Service.on_connect and on_disconnect, adding the connection as argument.
Changed signature of Service.__init__, removing the connection argument
no longer store connection as self._conn. (allows services that serve multiple clients using the same service object, see #198).
SlaveService is now split into two asymmetric classes: SlaveService and MasterService. The slave exposes functionality to the master but can not anymore access remote objects on the master (#232, #248). If you were previously using SlaveService, you may experience problems when feeding the slave with netrefs to objects on the master. In this case, do any of the following:
use ClassicService (acts exactly like the old SlaveService)
use SlaveService with a config that allows attribute access etc
use rpyc.utils.deliver to feed copies rather than netrefs to the slave
RegistryServer.on_service_removed is once again called whenever a service instance is removed, making it symmetric to on_service_added (#238) This reverts PR #173 on issue #172.
Removed module rpyc.experimental.splitbrain. It's too confusing and undocumented for me and I won't be developing it, so better remove it altogether. (It's still available in the splitbrain branch)
Removed module rpyc.experimental.retunnel. Seemingly unused anywhere, no documentation, no clue what this is about.
bin/rpyc_classic.py will bind to 127.0.0.1 instead of 0.0.0.0 by default
SlaveService no longer serves exposed attributes (i.e., it now uses allow_exposed_attrs=False)
Exposed attributes no longer hide plain attributes if one otherwise has the required permissions to access the plain attribute. (#165)
teleported functions will now be defined by default in the globals dict
Can now explicitly specify globals for teleported functions
Can now use streams as context manager
keep a hard reference to connection in netrefs, may fix some EOFError issues, in particular on Jython related (#237)
handle synchronous and asynchronous requests uniformly
fix deadlock with connections talking to each other multithreadedly (#270)
handle timeouts cumulatively
fix possible performance bug in Win32PipeStream.poll (oversleeping)
use readthedocs theme for documentation (#269)
actually time out sync requests (#264)
clarify documentation concerning exceptions in Connection.ping (#265)
rename async module to async_ for py37 compatibility (#253)
fix deliver() from IronPython to CPython2 (#251)
fix brine string handling in py2 IronPython (#251)
add gevent Server. For now, this requires using gevent.monkey.patch_all() before importing for rpyc. Client connections can already be made without further changes to rpyc, just using gevent's monkey patching. (#146)
add function rpyc.lib.spawn to spawn daemon threads
fix several bugs in bin/rpycd.py that crashed this script on startup (#231)
fix problem with MongoDB, or more generally any remote objects that have a catch-all __getattr__ (#165)
fix bug when copying remote numpy arrays (#236)
added rpyc.utils.helpers.classpartial to bind arguments to services (#244)
can now pass services optionally as instance or class (could only pass as class, #244)
The service is now charged with setting up the connection, doing so in Service._connect. This allows using custom protocols by e.g. subclassing Connection. More discussions and related features in #239-#247.
service can now easily override protocol handlers, by updating conn._HANDLERS in _connect or on_connect. For example: conn._HANDLERS[HANDLE_GETATTR] = self._handle_getattr.
most protocol handlers (Connection._handle_XXX) now directly get the object rather than its ID as first argument. This makes overriding individual handlers feel much more high-level. And by the way it turns out that this fixes two long-standing issues (#137, #153)
fix bug with proxying context managers (#228)
expose server classes from rpyc top level module
fix logger issue on jython
Fix refcount leakage when unboxing from cache (#196_)
Fix export_function on python 3.6
Date: 14.06.2017
Fix export_function on python 3.6
Please excuse the briefity for this versions changelist.
RPyC integrates with plumbum _; plumbum is required for some features, like rpyc_classic.py and *zero deploy*, but the core of the library doesn't req
RPyC integrates with plumbum; plumbum is required for some features, like rpyc_classic.py and zero deploy, but the core of the library doesn't require it. It is, of course, advised to have it installed.
SshContext, SshTunnel classes killed in favor of plumbum's SSH tunneling. The interface doesn't change much, except that ssh_connect now accept a plumbum.SshMachine instance instead of SshContext.
Zero deploy: deploy RPyC to a remote machine over an SSH connection and form an SSH tunnel connected to it, in just one line of code. All you need is SSH access and a Python interpreter installed on the remote machine.
Dropping Python 2.4 support. RPyC now requires Python 2.5 - 3.3.
rpycd - a well-behaved daemon for rpyc_classic.py, based on python-daemon
The OneShotServer is now exposed by rpyc_classic -m oneshot
scripts directory renamed bin
Introducing Splitbrain Python - running code on remote machines transparently. Although tested, it is still considered experimental.
Removing the BgServerThread and all polling/timeout hacks in favor of a "global background reactor thread" that handles all incoming transport from all connections. This should solve all threading issues once and for all.
Added MockClassicConnection - a mock RPyC "connection" that allows you to write code that runs either locally or remotely without modification
Added teleport_function
Fix (issue #76_) for real this time
Fix (issue #76) for real this time
Fix issue with BgServingThread (#89)
Fix issue with ThreadPoolServer (#91)
Remove RPyC's excepthook in favor of chaining the exception's remote tracebacks in the exception class' __str__ method. This solves numerous issues with logging and debugging.
Add OneShotServer
Add UNIX domain sockets (#100)
Windows: make SSH tunnels windowless (#68_)
Windows: make SSH tunnels windowless (#68)
Fixes a compatibility issue with IronPython on Mono (#72)
Fixes an issue with introspection when an AttributeError is expected (#71)
The server now logs all exceptions (#73)
Forking server: call siginterrupt(False) in forked child (#76)
Shutting down the old wikidot site
Adding Travis CI integration
Fixing site documentation issue (#54_)
Added SSH tunneling support (ssh_connect)
Added support for IPv6 (#28)
Added SSH tunneling support (ssh_connect)
Added restricted object wrapping
Several fixes to AsyncResult and weak references
Added the ThreadPoolServer
Fixed some minor (harmless) races that caused tracebacks occasionally when server-threads terminated
Converted all CRLF to LF (#40)
Dropped TLSlite integration (#45). We've been dragging this corpse for too long.
New documentation (both the website and docstrings) written in Sphinx
The site has moved to sourceforge. Wikidot had served us well over the past three years, but they began displaying way too many ads and didn't support uploading files over rsync, which made my life hard.
New docs are part of the git repository. Updating the site is as easy as make upload
Python 3.0-3.2 support
Your coding agent can read these notes before it upgrades. Set up the MCP server →