【问题标题】:ImportError: cannot import name constantsImportError:无法导入名称常量
【发布时间】:2015-12-15 02:14:21
【问题描述】:

我正在尝试使用 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 文件放置在关卡中。

请帮忙!

编辑:

我已经按照here 的指示删除了这两个版本的 pyzmq 并重新安装了最新的 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

但这并不能解决问题。我遇到了同样的错误!

【问题讨论】:

  • 您好像安装了两个版本。尝试重新开始。删除所有 pyzmq 包并重新安装它(使用 pip 或其他)。
  • 不要将任何 Python 包复制到您的代码中。它以特定方式构建,并且在导入时遵循非常严格和复杂的规则。这绝对不能解决问题,即使它可能看起来像这样。错误一定在其他地方。
  • 很高兴您解决了问题!您应该提交答案,并在允许的情况下接受它,以便将来的读者知道问题已解决。
  • 你是怎么解决你的问题的?

标签: python zeromq pyzmq


【解决方案1】:

所以,在这种情况下对我有用的是来自letsencrypt论坛的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

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

【讨论】:

  • 当我使用命令时它适用于我:sudo rm /usr/local/bin/certbot
【解决方案2】:

以下内容对我有用。

pip install --upgrade pyzmq --user

--user 是检查权限

【讨论】:

    【解决方案3】:

    我遇到了类似的问题。 pip install --upgrade pyzmq 为我成功了

    【讨论】:

    • 不幸的是,不适合我
    • 你也没有为我工作,有人找到解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2016-03-31
    • 2014-10-10
    • 2014-09-20
    • 2014-08-28
    • 2014-06-10
    • 2016-05-16
    相关资源
    最近更新 更多