这个cx_Freeze错误是什么意思?

0 投票
1 回答
759 浏览
提问于 2025-04-18 16:22

我在Windows 7上尝试使用cx_Freeze来打包一个依赖pyzmq的Python 3.4应用程序时,运行生成的可执行文件时遇到了一个异常,搞得我有点摸不着头脑。这个错误的详细信息(为了简洁,已编辑)看起来是这样的:

  Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\cx_freeze-4.3.3-py3.4-win32.egg\cx_Freeze\initscripts\Console.py", line 27, in <module>
    exec(code, m.__dict__)
  [...]
  File "Q:\Users\arvek\Repositories\accc-gui\aiozmq\aiozmq\__init__.py", line 4, in <module>
    import zmq
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
    module = _SpecMethods(spec)._load_unlocked()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
    return self._load_backward_compatible()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "C:\Python34\lib\site-packages\zmq\__init__.py", line 49, in <module>
    from zmq.backend import *
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
    module = _SpecMethods(spec)._load_unlocked()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
    return self._load_backward_compatible()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "C:\Python34\lib\site-packages\zmq\backend\__init__.py", line 41, in <module>
    reraise(*exc_info)
  File "C:\Python34\lib\site-packages\zmq\utils\sixcerpt.py", line 34, in reraise
    raise value
  File "C:\Python34\lib\site-packages\zmq\backend\__init__.py", line 29, in <module>
    _ns = select_backend(first)
  File "C:\Python34\lib\site-packages\zmq\backend\select.py", line 26, in select_backend
    mod = __import__(name, fromlist=public_api)
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
    module = _SpecMethods(spec)._load_unlocked()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
    return self._load_backward_compatible()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "C:\Python34\lib\site-packages\zmq\backend\cython\__init__.py", line 6, in <module>
    from . import (constants, error, message, context,
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2284, in _handle_fromlist
    _call_with_frames_removed(import_, from_name)
  File "C:\Python34\lib\importlib\_bootstrap.py", line 321, in _call_with_frames_removed
    return f(*args, **kwds)
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "C:\Python34\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
    module = _SpecMethods(spec)._load_unlocked()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
    return self._load_backward_compatible()
  File "C:\Python34\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "ExtensionLoader_zmq_backend_cython_error.py", line 22, in <module>
  File "ExtensionLoader_zmq_backend_cython_error.py", line 14, in __bootstrap__
ImportError: DLL load failed: The specified module could not be found.

这个错误的具体原因是什么呢?也就是说,缺少了哪个模块(我猜是DLL)呢?

1 个回答

1

提示在下面的错误追踪信息中:

File "C:\Python34\lib\site-packages\zmq\backend\cython\__init__.py", line 6, in <module>
  from . import (constants, error, message, context,

这个信息并没有直接告诉我们哪里出错了,但它指向了模块 zmq.backend.cython.constants 等,说明这些模块可能有问题,也就是说,它们缺少一个 DLL 依赖文件。经过使用 DependencyWalker 检查后,发现 'C:\Python34\lib\site-packages\zmq\libzmq.pyd' 就是我们所说的那个缺失的 DLL 文件。如果把这个文件包含在打包的应用程序里,它就能正常工作了。

撰写回答