Python/SciPy - 创建可执行文件

Posted

技术标签:

【中文标题】Python/SciPy - 创建可执行文件【英文标题】:Python/SciPy - Creating an executable 【发布时间】:2013-03-12 16:45:19 【问题描述】:

我有一个使用 SciPy 的简短 python 脚本,它运行完美,但我无法将其转换为可执行文件。 我使用 Windows 7 64 位和 Python 2.7,以及 Christoph Golke 提供的 Numpy/SciPy 版本(http://www.lfd.uci.edu/~gohlke/pythonlibs,cx_freeze 和 py2exe 也在那里下载),一切都是 64 位的。由于 32 位 4GB RAM 的限制,需要 64 位。

我尝试了几件事:pyinstaller、py2exe 和 cx_freeze(同样是 64 位)。每次我运行可执行文件时,都会出现“导入错误:没有名为 XXX 的模块”,其中 XXX 等于不同的东西(_validation、_csr、None、multiarray)。 使用 py2exe,我管理它以获取“ImportError:DLL 加载失败:%1 不是有效的 Win32 应用程序”。

我搜索了此类错误并尝试包含不同的模块(同样使用上述所有三个脚本),但仍然出现相同的错误。

我的脚本:

#!/usr/bin/python

# easy.py

import scipy as sp
from scipy.io import wavfile
from scipy import signal
import numpy as np

rate,data = sp.io.wavfile.read('2.wav')
if data.ndim >= 2:
    data = data[ : ,0]
min = data.min()
if min < 0:
    data= np.multiply(data,0.5)
    data= np.add(data,min/-2)

rate2,data2 = sp.io.wavfile.read('MVI_1849.wav')
if data2.ndim >= 2:
    data2 = data2[ : ,0]
min2 = data2.min()
if min2 < 0:
    data2= np.multiply(data2,0.5)
    data2= np.add(data2,min2/-2)
data2=data2[::-1]

corr = signal.fftconvolve(data,data2)
max = np.argmax(corr)
offset = float(max-len(data2)) / float(rate)

print(offset)

我读到这与 NumPy/SciPy 的导入机制有关,但我不知道如何修复它。 如果您需要更多信息,请告诉我。 谢谢大家!

【问题讨论】:

【参考方案1】:

通过谷歌搜索,这似乎是 scipy 的 py2exe 中的一个错误,建议的解决方案是手动导入 scipy 模块:

from scipy.sparse.csgraph import _validation

看看这里: scipy with py2exe

希望这适用于您的情况。

【讨论】:

我这样做了,然后出现了另一个错误:“ImportError: DLL load failed: %1 is not an valid Win32 application”。我拥有 64 位的所有内容并检查了以下 3 个线程(前 3 个结果):tinyurl.com/cva3mj6 为什么不尝试手动加载 Scipy 的所有依赖项?

以上是关于Python/SciPy - 创建可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

当可执行文件派生另一个可执行文件时,不会创建 gmon.out

linux创建内核可执行文件时的错误,请问该如何解决?

关闭并重新启动可执行文件后,无法修改或删除由我的 .jar 可执行文件创建的文本文件

为 Qt 项目创建可执行文件

如何让shell脚本变成可执行文件

从可执行文件创建 Windows 服务