ZeroRPC与IronPython

3 投票
2 回答
757 浏览
提问于 2025-05-01 08:49

我真的很想在我的项目中使用很棒的 zerorpc,这个项目是用IronPython做的,但它似乎不支持这个。

我尝试下载了 zerorpc 的源代码压缩包,然后运行了

"C:\Program Files (x86)\IronPython 2.7\ipy.exe" setup.py install

但是在这个过程中我遇到了以下问题:

warning: build_py: byte-compiling is disabled, skipping.

这并不与这个回答相矛盾: C#和CPython之间快速且可扩展的RPC

我有几个问题:

  1. 能否让zerorpc在IronPython上运行,如果可以的话,能给我一点提示吗?
  2. 如果不行,那有没有其他类似的包可以在IronPython中提供相同的功能?这里有一个列表: 目前在Python中做RPC的选择是什么?,但有没有人知道这些包中有没有适用于IronPython的?

更新 2

根据@PawelJasinski的建议和他对pyzmq ironpython-backend的更新,我尝试了以下步骤:

  1. 安装IronPython 2.7.5b2或更高版本
  2. http://zeromq.org/distro:microsoft-windows 安装32位版本的zeromq
  3. https://github.com/paweljasinski/pyzmq/tree/ironpython-backend 克隆 ironpython-backend 分支
  4. pyzmq 目录中,运行 ipy.exe setup.py install --user
  5. https://github.com/dotcloud/zerorpc-python 克隆zerorpc
  6. zerorpc-python 中,运行 ipy.exe setup.py install --user
  7. 设置环境变量: set PYZMQ_BACKEND=zmq.backend.ctypes
  8. 尝试使用来自 https://github.com/dotcloud/zerorpc-python 的 'Cooler' 类示例,运行 ipy.exe -X:Frames cooler.py

(cooler.py):

class Cooler(object):
    """ Various convenience methods to make things cooler. """

    def add_man(self, sentence):
        """ End a sentence with ", man!" to make it sound cooler, and
        return the result. """
        return sentence + ", man!"

    def add_42(self, n):
        """ Add 42 to an integer argument to make it cooler, and return the
        result. """
        return n + 42

    def boat(self, sentence):
        """ Replace a sentence with "I'm on a boat!", and return that,
        because it's cooler. """
        return "I'm on a boat!"

import zerorpc

s = zerorpc.Server(Cooler())
s.bind("tcp://0.0.0.0:4242")
s.run()

现在我看到这个错误:

Traceback (most recent call last):
  File "C:\Users\nlindop\AppData\Roaming\Python\IronPython27\site-packages\zmq\backend\select.py", line 26, in select_backend
  File "C:\Users\nlindop\AppData\Roaming\Python\IronPython27\site-packages\zmq\backend\ctypes\__init__.py", line 26, in <module>
  File "C:\Users\nlindop\AppData\Roaming\Python\IronPython27\site-packages\zmq\backend\ctypes\constants.py", line 16, in <module>
ImportError: No module named ZMQ
暂无标签

2 个回答

2

关于问题的第二部分,pyro(还有它依赖的serpent)支持IronPython和Jython。

注意:要远离IronPython 2.7.5b3版本,因为它有一个bug,会导致serpent出问题。2.7.4和2.7.5b2版本是没问题的。接下来的2.7.5版本已经修复了这个问题。

2

ZeroRPC看起来是纯Python写的,并且是基于pyzmq这个库的。如果你想在IronPython上使用,可以尝试pyzmq的ctypes后端。你可以在这里找到相关的代码:https://github.com/paweljasinski/pyzmq/tree/ironpython-backend

  • 使用IronPython 2.7.5b2或更新版本
  • 从这个网站安装32位版本的zmq:http://zeromq.org/distro:microsoft-windows
  • 安装pyzmq本身,先克隆代码,然后运行ipy.exe setup.py install --user。安装时会自动检测你的zmq并选择合适的dll文件
  • 激活ctypes后端,设置环境变量PYZMQ_BACKEND=zmq.backend.ctypes

更新:ZeroRPC依赖于gevent,而这个在IronPython下是不可用的,所以上面的步骤仅适用于IronPython下的pyzmq。

撰写回答