py2exe:错误:libzmq.pyd:没有这样的文件或目录

时间:2013-02-14 08:43:58

标签: python py2exe pyzmq

在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 个答案:

答案 0 :(得分:10)

使其运作需要三个步骤:

  • 使用libzmq.pyd选项从dll中排除dll_excludes。这可以避免“缺少pyzmq.pyd”错误。
  • zmq.libzmq的模块中排除excludes(同样的事情)。这会跳过通常的.pyd renamind和代理py2exe。
  • 使用zmq.backend.cython选项显式添加includes,因为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__,))
    ]
)

答案 1 :(得分:3)

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

py2exe wiki不是最新的(至少我认为)。我相信版本13.0.0进行了更改,其中libzmq.pyd替换了libzmq.dll。 Py2exe对扩展模块的正常处理将其重命名为" zmq.libzmq.pyd",但是由于(例如)zmq.core._device.pyd显式链接到libzmq,因此打破了windows dll的发现。 PYD。

这激发了另一个丑陋的修复方法,即将zmq.libzmq.pyd复制到py2exe生成的dist文件夹中的libzmq.pyd。使用此修复程序,我的py2exe输出exe正确运行导出错误。

答案 2 :(得分:1)

我不确定这是一个最佳解决方案,但它对我有用:

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

的Mads

答案 3 :(得分:0)

一个更简单的解决方案,如上所述,一个解决方案需要编译libzmq - 但是我很傻。

  1. 将libzmq.pyd从C:\ python27 \ Lib \ sites-packages \ zmq复制到c:\ python27 \ DLLs import zmq.libzmq
  2. 在您的设置中包含以下include和data_files。 那是

    设置(     #...     选项= {         ' py2exe':{             '包括':[' zmq.backend.cython']         }     },     data_files = [         (' lib',(zmq.libzmq。 file ,))     ] )