python-3.x - 命令行或 .exe 中的 Python 程序给出 MemoryError,但在 Spyder IDE 中工作正常

标签 python-3.x command-line out-of-memory exe spyder

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/

相关文章:

python - 如何修复ModuleNotFoundError : No module named 'pip._internal' with python source code installation

command-line - Windows 中命令行命令的最佳自动化脚本?

windows - "Failed to add the host to the list of known hosts" Windows 提示

java - 继续获取: Requested array size exceeds VM limit error

c# - 大集合和 OrderBy 的 OutOfMemoryException?

python - 如何在pygame中将三角形旋转到一定角度?

python-3.x - 当我在 Docker 中运行代码时,我收到一个 Django 错误 [Errno 2]。在本地运行时,一切正常。为什么?

linux - Nose 测试不同 Python 版本的执行?

xml-parsing - Clojure Leining REPL OutOfMemoryError Java 堆空间

python - 在 Python 3 中从 "sub-sub-directory"导入模块