Version: Python 3.7 (Spyder) -- OS: Windows10 -- System: Core i5 (6th gen) + 16gb RAM
我编写了一个处理大量数据的程序。使用以下结构来完成此操作:
计划说明
- GUI 界面用作主函数(类)。这里弹出一个界面,要求用户输入,使用这个输入进行各种计算,这些计算在不同的函数中指定。
- 第一个功能是导入功能,在指定的(由用户)文件夹中搜索所有 .wav 文件并导入这些文件的数据。所有导入的项目都附加(numpy.append)到一个大数组中。
- 大数组(20 个文件,约 2.000.000.000 个数据点)用于计算声音文件的特征。它有这么多数据点的原因是因为 .wav 文件的采样率设置为 78125 个样本/秒,这是我需要进行精确计算的。
- 计算完成后,会在指定文件夹中生成 2 个绘图,并且还将 2 个 csv 数据与请求的数据一起存储在该文件夹中。
问题陈述
在spyder环境中运行主函数(程序),工作完全正常。检查所有数据并生成输出大约需要 10 分钟。
使用 PyInstaller 将函数编译为 .exe,工作正常,没有错误,导入了所有依赖项。然而,当运行程序时,几乎立即弹出 MemoryError(见下图)。
Image: error message from command line when executing the exe file
尝试过的解决方案
通过 CLI 运行 python 脚本,出现相同的错误
运行仅需要导入 2 个文件的 .exe 程序,可以处理所有文件,但速度非常慢(比通过 spy 程序执行的速度慢得多)
问题
- 为什么spyder内存足够,处理所有数据没有问题,但是通过命令行执行.py或者执行.exe文件时,总是出现内存错误?
- 为什么 .exe 或通过 CL 的 .py 运行速度比在spyder IDE 中慢?
目标
这个程序应该能够处理公司每台笔记本电脑上的噪声数据(有时还包括 8GB 内存)。所以我想找到一种方法让程序分配所用机器上所有可用的RAM。
提前感谢您的帮助!
最佳答案
同时,感谢Axe319,我找到了问题的答案:
Spyder IDE运行在64位版本的python上,使得程序运行流畅,没有任何问题。尽管如此,我的 python 解释器仍然是 32 位版本的 python。
解决问题所采取的步骤:
- 卸载python 32位版本
- 安装python 64位版本
- 使用 pip install 再次安装所有使用过的软件包-packages-
- 使用 pip install pyinstaller 再次安装 PyInstaller
- 使用 PyInstaller 将程序编译为 .exe
在这之后一切似乎都正常了!
关于python-3.x - 命令行或 .exe 中的 Python 程序给出 MemoryError,但在 Spyder IDE 中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59965940/