次の設定があります: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'
リモートメソッドを使用しようとするとき。パイロドキュメントは、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.3virtualenvの場合:
import Pyro4
rtest = Pyro4.Proxy("PYRONAME:foo")
print(rtest.foo())
上記の正確な例外が発生します。