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

谁能解释我是否真的需要它,在哪里可以找到它或如何排除它。

谢谢麦兹

4

4 回答 4

10

要使其工作,需要三个步骤:

  • 使用选项libzmq.pyd从 dll 中排除。dll_excludes这样可以避免“缺少 pyzmq.pyd”错误。
  • zmq.libzmq带有excludes. 这跳过了 py2exe 所做的通常的 .pyd 重命名和代理。
  • 显式添加zmq.backend.cythonwith includesoption,因为 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__,))
    ]
)
于 2014-04-20T07:07:23.457 回答
3

不幸的是,这不是一个好的答案,但我认为这是一个不错的诊断。

py2exe wiki不是最新的(至少我认为)。我相信版本 13.0.0 进行了更改,其中 libzmq.pyd 替换了 libzmq.dll。Py2exe 对扩展模块的正常处理将其重命名为“zmq.libzmq.pyd”,但这会破坏 Windows dll 的发现,因为(例如)zmq.core._device.pyd 明确链接到 libzmq.pyd。

这激发了将 zmq.libzmq.pyd 复制到 py2exe 生成的 dist 文件夹中的 libzmq.pyd 的另一种丑陋修复。通过此修复,我的 py2exe 输出 exe 可以正常运行,不会出现导入错误。

于 2013-03-05T14:36:16.100 回答
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\

麦兹

于 2013-02-14T10:51:17.510 回答
0

一个更简单的解决方案,如上所述,一个解决方案需要编译 libzmq - 但 Im-lzy。

  1. 将 libzmq.pyd 从 C:\python27\Lib\sites-packages\zmq 复制到 c:\python27\DLLs import zmq.libzmq
  2. 在您的设置中包含以下包含和数据文件。而已

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

于 2017-09-30T11:00:52.203 回答