ImportError:无法导入名称常量

时间:2015-09-18 03:30:33

标签: python zeromq pyzmq

我试图使用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的新手,并没有遵循适当的文件夹/模块结构进行导入。然而,回溯并没有多大帮助。

2 个答案:

答案 0 :(得分:7)

我遇到了类似的问题。 pip install --upgrade pyzmq为我做了诀窍

答案 1 :(得分:0)

因此,在这种情况下对我有用的是来自letencrypt论坛的Osiris提供的以下解决方案:

  1. 问题在于您有2个版本的certbot(就我而言,我可以通过以下命令了解该信息:

whereis certbot

输出如下:

certbot: /usr/bin/certbot /usr/local/bin/certbot /usr/share/man/man1/certbot.1.gz

  1. 然后我尝试使用以下命令续订它们:

/usr/bin/certbot renew
/usr/local/bin/certbot renew

我得到了错误:
An unexpected error occurred: ImportError: cannot import name 'constants'
...和第二个!
因此,我使用以下命令删除了此文件夹:
sudo rm usr/local/bin/certbot

然后错误消失了
希望有帮助