py2exe: 错误: libzmq.pyd文件不存在或路径错误

5

在执行py2exe构建时,我遇到了以下错误:

creating python loader for extension 'win32clipboard' (C:\Python27\lib\site-packages\win32\win32clipboard.pyd -> win32clipboard.pyd)
creating python loader for extension '_rl_accel' (C:\Python27\lib\site-packages\_rl_accel.pyd -> _rl_accel.pyd)
*** finding dlls needed ***
error: libzmq.pyd: No such file or directory

有人能解释一下我是否真的需要它,如何找到它或如何排除它吗?

谢谢 Mads

4个回答

10

使其正常工作需要三个步骤:

  • 使用 dll_excludes 选项将 libzmq.pyd 从 dll 中排除。这样可以避免出现“缺少 pyzmq.pyd”错误。
  • 使用 excludeszmq.libzmq(同样的东西)从模块中排除。这将跳过通常由 py2exe 进行的 .pyd 重命名和代理操作。
  • 使用 includes 选项显式添加 zmq.backend.cython ,因为 py2exe 无法通过 pyzmq 后端选择代码看到它。如果未能执行此操作,您将会遇到“找不到模块 cffi”的错误。

示例:

import zmq.libzmq

setup(
    # ...
    zipfile='lib/library.zip',
    options={
        'py2exe': {
            'includes': ['zmq.backend.cython'],
            'excludes': ['zmq.libzmq'],
            'dll_excludes': ['libzmq.pyd'],
        }
    },
    data_files=[
        ('lib', (zmq.libzmq.__file__,))
    ]
)

3
很抱歉,这不是一个好听的答案,但我认为它是一个不错的诊断。
据我所知,py2exe wiki已经过时了。我相信版本13.0.0做了一个改变,即libzmq.pyd代替了libzmq.dll。 Py2exe对扩展模块的常规处理将其重命名为“zmq.libzmq.pyd”,但这会破坏Windows查找dll的方式,因为(例如)zmq.core._device.pyd链接到libzmq.pyd。
这促使了另一种丑陋的解决方法,即在由py2exe生成的dist文件夹中将zmq.libzmq.pyd复制到libzmq.pyd。通过这个修复,我的py2exe输出exe可以正确运行而没有导入错误。

1

我不确定这是否是最佳解决方案,但它对我有效:

  • http://pypi.python.org/pypi/pyzmq下载pyzmq
  • 使用easy_install安装egg
  • 将libzmq.dll从C:\ Python27 \ Lib \ site-packages \ pyzmq-2.2.0.1-py2.7-win32.egg \ zmq复制到C:\ Python27 \ dlls \

Mads


1
还有另一种解决方案。请参见**这里**。 - pradyunsg

0

一个更简单的解决方案,它也起作用,因为上面的解决方案需要编译libzmq - 但我很懒。

  1. 从C:\ python27 \ Lib \ sites-packages \ zmq复制libzmq.pyd到c:\ python27 \ DLLs import zmq.libzmq
  2. 在设置中包含以下内容和data_files。 就是这样

    setup(     # ...     options = {         'py2exe':{             'includes':['zmq.backend.cython']         }     },     data_files = [         ('lib',(zmq.libzmq。文件,))     ] )


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接