使用CX_Freeze与Scipy:scipy.special._ufuncs.py

6

我遇到了一个问题,我的程序无法冻结。我将问题缩小到了scipy模块。我正在尝试冻结的程序是:

from scipy import signal
signal.hann(1000)

我的设置脚本是:

import sys
from cx_Freeze import setup, Executable

build_exe_options = {}

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

setup(  name = "Some name",
        version = "1.0",
        author="My name",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("Script_Name.py", base=base)])
                                    # ^CHANGE THIS NAME!!!

这里是一个错误信息的图片。我还尝试在设置文件中包含scipy.signal。

build_exe_options = {"includes":"scipy.signal"}

但这没什么用。请帮帮我。

1
这个问题中,提问者发现将构建目录中的库重命名可以解决问题。您的构建目录中是否有一个名为scipy.special._ufuncs.pyd(或.dll)的文件?您可以尝试将其重命名为_ufuncs.pyd(或.dll)吗? - Thomas K
我通过复制numpy\core中的libmmd.dll和libifcoremd.dll来解决了这个问题。 - Kknd
1个回答

8

我曾经遇到过类似的问题,解决方法如下:

1. 确保构建目录中包含名为_ufunc.pyd的文件(而不是上述提到的scipy.special._ufuncs.pyd)。您可以通过指定build_exe_options来实现此目的:

build_exe_options = { 'packages': ['scipy'],
                     "include_files": [('path2python\\Lib\\site-packages\\scipy\\special\\_ufuncs.pyd','_ufuncs.pyd')]}

2 确保ufunc.pyd使用的所有dll也在构建目录中。 在我的情况下,libifcoremd.dll和libmmd.dll失败了。 您可以使用dependencywalker检查此内容。

我希望这能帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接