我试图使用pyzmq运行一段简单的代码。我使用的是Python 2.7和pyzmq 14.5
$ python --version
Python 2.7.6
$ sudo find /usr -name "*pyzmq*"
/usr/local/lib/python2.7/dist-packages/pyzmq-14.5.0.egg-info
/usr/lib/python2.7/dist-packages/pyzmq-14.0.1.egg-info
以下是我试图运行的代码:
import zhelpers
context = zmq.Context.instance()
server = context.socket(zmq.ROUTER)
server.bind("tcp://*:5678")
while (1):
address, empty, data = server.recv_multipart()
print("address = %s, data = %d" % (address, int(data)))
data_i = int(data) + 10
server.send_multipart([
address,
b'',
str(data_i),
])
但是,我得到了以下错误,并且不知道如何解决这个问题:
Traceback (most recent call last):
File "reqrep_server.py", line 8, in <module>
import zhelpers
File "/home/arun/pyzmq_server/zhelpers.py", line 11, in <module>
import zmq
File "/home/arun/pyzmq_server/zmq/__init__.py", line 66, in <module>
from zmq import backend
File "/home/arun/pyzmq_server/zmq/backend/__init__.py", line 41, in <module>
reraise(*exc_info)
File "/home/arun/pyzmq_server/zmq/backend/__init__.py", line 29, in <module>
_ns = select_backend(first)
File "/home/arun/pyzmq_server/zmq/backend/select.py", line 27, in select_backend
mod = __import__(name, fromlist=public_api)
File "/home/arun/pyzmq_server/zmq/backend/cython/__init__.py", line 6, in <module>
from . import (constants, error, message, context, socket, utils, _poll, _version, _device)
ImportError: cannot import name constants
我已复制了整个 zmq 文件夹,并将其作为我的.py文件放在该级别中。
请帮忙!
修改
我已经删除了这两个版本的pyzmq,并按照指示here重新安装了最新的pyzmq(这次捆绑了libzmq)。
$ sudo find /usr -name "*pyzmq*"
/usr/local/lib/python2.7/dist-packages/pyzmq-14.7.0-py2.7.egg-info
$ sudo find /usr -name "*libzmq*"
/usr/local/lib/libzmq.so
/usr/local/lib/libzmq.la
/usr/local/lib/libzmq.so.5.0.0
/usr/local/lib/pkgconfig/libzmq.pc
/usr/local/lib/libzmq.so.5
/usr/local/lib/python2.7/dist-packages/zmq/libzmq.so
/usr/local/lib/python2.7/dist-packages/zmq/backend/cython/libzmq.pxd
/usr/local/lib/libzmq.a
但这并没有解决问题。我得到了同样的错误!
修改
问题解决了!我是Python的新手,并没有遵循适当的文件夹/模块结构进行导入。然而,回溯并没有多大帮助。
答案 0 :(得分:7)
我遇到了类似的问题。 pip install --upgrade pyzmq
为我做了诀窍
答案 1 :(得分:0)
因此,在这种情况下对我有用的是来自letencrypt论坛的Osiris提供的以下解决方案:
whereis certbot
输出如下:
certbot: /usr/bin/certbot /usr/local/bin/certbot /usr/share/man/man1/certbot.1.gz
/usr/bin/certbot renew
/usr/local/bin/certbot renew
我得到了错误:
An unexpected error occurred:
ImportError: cannot import name 'constants'
...和第二个!
因此,我使用以下命令删除了此文件夹:
sudo rm usr/local/bin/certbot
然后错误消失了
希望有帮助