我有一个使用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.devices.monitoredqueuedevice导入的zmq.core.FORWARDER ?从zmq.devices.monitoredquedevice导入的zmq.core.QUEUE ?从zmq.devices.monitoredquedevice
导入的zmq.core.ZMQError我一直试图找出这个问题一两个小时,似乎它可能与它应该导入的DLL有关,但事实并非如此。 ZMQ需要工作的一些DLL,但我找不到它是哪一个。
答案 0 :(得分:1)
通过添加:
修复 ['zmq','zmq.utils.garbage','zmq.backend.cython']
打包,然后将zmq.libzmq.pyd
重命名为libzmq.pyd
答案 1 :(得分:0)
您可能必须向包含中明确添加一个或多个模块。如果它是一个DLL问题,我通常使用Dependency Walker来解决它。你可以在这里免费获得它:http://www.dependencywalker.com/
它偶尔会给我一个误报,但总的来说它几乎总是有帮助的。