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