2

我有一个使用 ZMQ 的 python 程序。我想冻结它,以便每个人都可以将它用作可执行文件。这是我的 setup.py

import sys

from cx_Freeze import setup, Executable
includes = ["sip", "re", "zmq", "PyQt4.QtCore", "atexit", "zmq.utils.strtypes", "zmq.utils.jsonapi", "encodings.hex_codec"]

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup (
    name = "prueba",
    version = "0.1",
    description = "Esto es una prueba",
    options = {"build_exe" : {"includes" : includes }},
    executables = [Executable("Cliente.py", base = base)])

当我在 Linux 上运行它时,它运行良好并且我的程序运行正常,但是当我在 Windows 上运行时,当我执行 .exe 文件时出现以下错误:

from zmq.core import (constants, error, message, context,
File "ExtensionLoader_zmq_core_error.py", line 12, in <module>
ImportError: DLL load failed: The specified module cannot be found

此外,当 CX_Freeze 工作时,我可以注意到以下几行:缺少模块:?从 zmq.devices.basedevice 导入的 zmq.core.Context ?zmq.core.FORWARDER 从 zmq.devices.monitoredqueuedevice 导入?从 zmq.devices.monitoredquedevice 导入的 zmq.core.QUEUE ?从 zmq.devices.monitoredquedevice 导入的 zmq.core.ZMQError

我一直试图找出这个问题一两个小时,似乎它可能与它应该导入的 DLL 有关,但事实并非如此。ZMQ 需要工作的一些 DLL,但我找不到它是哪一个。

4

2 回答 2

1

通过添加修复:

['zmq','zmq.utils.garbage','zmq.backend.cython']

到包,然后重命名zmq.libzmq.pydlibzmq.pyd

于 2015-07-14T18:16:18.790 回答
0

您可能必须明确地将一个或多个模块添加到您的包含中。如果它是一个 DLL 问题,我通常使用 Dependency Walker 来解决它。你可以在这里免费获得它:http: //www.dependencywalker.com/

它偶尔会给我一个误报,但总的来说它几乎总是有帮助的。

于 2012-07-06T20:13:05.643 回答