我有以下设置:在 python2.7 下运行的 Pyro 名称服务器,在 python2.7 下运行的 Pyro 守护程序,以及(理想情况下)运行 python3.3 的 Pyro 客户端。
如果我使用在 python2.7 下运行的客户端连接到服务器,一切正常。当为客户端使用 python3.3 时,我可以很好地创建代理连接,但我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/project_path/lib/python3.3/site-packages/Pyro4/core.py", line 149,
return self.__send(self.__name, args, kwargs)
File "/project_path/lib/python3.3/site-packages/Pyro4/core.py", line 271,
self.__pyroCreateConnection()
File "/project_path/lib/python3.3/site-packages/Pyro4/core.py", line 322,
uri=resolve(self._pyroUri)
File "/project_path/lib/python3.3/site-packages/Pyro4/naming.py", line 336
nameserver=locateNS(uri.host, uri.port)
File "/project_path/lib/python3.3/site-packages/Pyro4/naming.py", line 274
proxy.ping()
File "/project_path/lib/python3.3/site-packages/Pyro4/core.py", line 149,
return self.__send(self.__name, args, kwargs)
File "/project_path/lib/python3.3/site-packages/Pyro4/core.py", line 290,
data=self._pyroSerializer.deserialize(data, compressed=flags & MessageFactory.FLAGS_COMPRESSED)
File "/project_path/lib/python3.3/site-packages/Pyro4/util.py", line 146,
return self.pickle.loads(data)
ImportError: No module named 'exceptions'
尝试使用任何远程方法时。pyro 文档似乎暗示我应该能够将 python2.7 实例与 python3.3 互连,不是这样吗?
python 的 2.7 和 3.3 实例都使用 Pyro4 版本 4.16
编辑:这是一些对我不起作用的实际代码:
(用一个python2 ns 启动)
在 python2.7 virtualenv 中:
import Pyro4
class TestProxy(object):
def foo(self):
return "bar"
if __name__ == "__main__":
print "* Starting test proxy"
daemon=Pyro4.Daemon()
tproxy_uri=daemon.register(TestProxy())
ns=Pyro4.locateNS()
ns.register("foo",tproxy_uri)
print "* Proxy started"
daemon.requestLoop()
在 python3.3 virtualenv 中:
import Pyro4
rtest = Pyro4.Proxy("PYRONAME:foo")
print(rtest.foo())
我得到了我上面提到的那个确切的例外。