Release Change Log
- 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.
SshTunnel classes killed in favor of plumbum’s SSH tunneling. The interface
doesn’t change much, except that
ssh_connect now accept a
- 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
OneShotServer is now exposed by
rpyc_classic -m oneshot
scripts directory renamed
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.
MockClassicConnection - a mock RPyC “connection” that allows you to write code that runs
either locally or remotely without modification
- Fix (issue #76) for real this time
- Fix issue with
- Fix issue with
- Remove RPyC’s
excepthook in favor of chaining the exception’s remote tracebacks in the
__str__ method. This solves numerous issues with logging and debugging.
- Add UNIX domain sockets
- Windows: make SSH tunnels windowless (#68)
- Fixes a compatibility issue with IronPython on Mono
- Fixes an issue with introspection when an
AttributeError is expected
- The server now logs all exceptions (#73)
- Forking server: call
siginterrupt(False) in forked child
- Shutting down the old wikidot site
- Adding Travis CI integration
- Adding missing import (#52)
- Fixing site documentation issue (#54)
- Fixing Python 3 incompatibilities (#58,
slice issue (#62)
- Added the
endpoints parameter to the config dict of connection (only on the server side)
- Added support for IPv6 (#28)
- Added SSH tunneling support (
restricted object wrapping
- Several fixes to
AsyncResult and weak references
- Added the
- Fixed some minor (harmless) races that caused tracebacks occasionally when
- Fixes issues #8,
- Converted all
- 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
- Python 3.0-3.2 support
- Supports CPython 2.4-2.7, IronPython, and Jython
- tlslite has been ported to
python 2.5-2.7 (the original library targeted 2.3 and 2.4)
- Initial python 3 support – not finished!
- Moves to a more conventional directory structure
- Moves to more standard facilities (
- Solves a major performance issue with the
by removing the contention between the two threads that share the connection
- Fixes lots of issues concerning the ForkingServer (#3,
#7, and #15)
- Many small bug fixes (#16,
- Integrates with the built-in
ssl module for SSL support
rpyc_classic.py now takes several
--ssl-xxx switches (see
for more info)
- Fixes typos, running pylint, etc.
Breakage from 3.0.7
- Removing egg builds (we’re pure python, and eggs just messed up the build)
- Package layout changed drastically, and some files were renamed
servers/ directory was renamed
classic_server.py was renamed
- They scripts now install to your python scripts directory (no longer part
of the package), e.g.
rpyc_classic.py now takes
--register in order to register,
--dont-register, which was a silly choice.
factory.tls_connect were renamed
to distinguish it from the new
- Moving to git as source control
- Build script: more egg formats; register in pypi ;
remove svn; auto-generate
license.py as well
- Cosmetic touches to
- Shutdown socket before closing (
SHUT_RDWR) to prevent
TIME_WAIT and other
problems with various Unixes
PipeStream: use low-level file APIs (
os.write) to prevent
stdio-level buffering that messed up
classic_server.py: open logfile for writing (was opened for reading)
registry_server.py: type of
timeout is now
utils/server.py: better handling of sockets; fix python 2.4 syntax issue
SIGCHLD handler after handling that signal,
to support non-BSD-compliant platforms where after the invocation of the signal
handler, the handler is reset
- Handle metaclasses better in
vinegar.py: handle old-style-class exceptions better; python 2.4 issues
VdbAuthenticator: when loading files, open for read only; API changes
from_dict instead of
from_file accepts open-mode
ForkingServer: better handling of SIGCHLD
setup.py now also creates egg files
- Slightly improved
- Fixes to
- The authenticator is now invoked by
_accept_client, which means it is invoked
on the client’s context (thread or child process). This solves a problem with
the forking server having a TLS authenticator.
- Changed the forking server to handle
SIGCHLD instead of using double-fork.
getattr to inspect the given object;
this caused a problem with premature activation of properties (as they are
getattr). Now it inspects the object’s type instead, following
the MRO by itself, to avoid possible side effects.
- Changed versioning scheme: now 3.0.3 instead of 3.03, and the version tuple is (3, 0, 3)
servers/vdbconf.py - a utility to manage verifier databases (used by
- Added the
--vdb switch to
classic_server.py, which invokes a secure server
(TLS) with the given VDB file.
- Authenticators: authenticated servers now store the credentials of the connection
Registry: added UDP and TCP registry servers and clients (
from rpyc.utils.registry import ...)
- Minor bug fixes
- More tests
- The test-suite now runs under python 2.4 too
- Fixes some minor issues/bugs
- The registry server can now be instantiated (no longer a singleton) and customized,
and RPyC server can be customized to use the different registry.
- comparison - comparing remote and local objects will usually not work, but
there’s nothing to do about it.
- 64bit platforms: since channels use 32bit length field, you can’t pass
data/strings over 4gb. this is not a real limitation (unless you have a super-fast
local network and tons of RAM), but as 64bit python becomes the defacto standard,
I will upgrade channels to 64bit length field.
- threads - in face of no better solution, and after consulting many people,
I resorted to setting a timeout on the underlying recv(). This is not an elegant
way, but all other solution required rewriting all sorts of threading primitives
and were not necessarily deadlock/race-free. as the zen says, “practicality beats purity”.
- Windows - pipes supported, but Win32 pipes work like shit
- Windows - pipe server doesn’t work