Программа Python в командной строке или .exe выдает MemoryError, однако отлично работает в IDE Spyder - PullRequest
2 голосов
/ 29 января 2020

Версия: Python 3.7 (Spyder) - ОС: Windows10 - Система: Core i5 (6-го поколения) + 16 ГБ ОЗУ

Я написал программу, которая обрабатывает много данных. Для выполнения sh используется следующая структура:

Описание программы

  • Интерфейс A GUI используется в качестве основной функции (класса). Здесь появляется интерфейс, запрашивающий ввод у пользователя, использует этот ввод для выполнения всех видов вычислений, которые указаны в различных функциях.
  • Первая функция - это функция импорта, где в указанном ( В папке user) выполняется поиск всех WAV-файлов и места их импорта. Все импортированные элементы добавляются (numpy .append) к одному большому массиву.
  • Большой массив (для 20 файлов около 2.000.000.000 точек данных) используется для расчета характеристик звукового файла. Причина, по которой у него так много точек данных, заключается в том, что частота дискретизации файла .wav установлена ​​на 78125 выборок / с, что мне необходимо для точных вычислений.
  • После вычислений в указанной папке создаются 2 графика и 2 csv также хранятся в этой папке с запрошенными данными.

Постановка задачи

  • Запуск основной функции (программы) в среда spyder, работает совершенно нормально. Для обработки всех данных требуется около 10 минут go.

  • Компиляция функции в .exe с помощью PyInstaller, работает нормально, без ошибок, все зависимости импортированы. Однако при запуске программы MemoryError появляется почти сразу (см. Изображение ниже).

Изображение: сообщение об ошибке из командной строки при выполнении исполняемого файла

Пробные решения

  • Запуск сценария python через CLI выдает ту же ошибку

  • Запуск Программа с расширением .exe, которая импортирует только 2 файла, работает со всеми файлами, но невероятно медленно (намного медленнее, чем выполняется через spyder)

Вопросы

  • Почему у spyder достаточно памяти для обработки всех данных без проблем, но при выполнении .py через командную строку или при выполнении файла .exe всегда возникает ошибка памяти?
  • Почему. exe или .py через CL работают медленнее, чем в IDE spyder?

Goal

Эта программа должна иметь возможность обрабатывать данные шума на каждом ноутбуке в компания (также 8 ГБ оперативной памяти иногда). Поэтому я хочу найти способ позволить программе распределять всю доступную оперативную память на используемом компьютере.

Заранее спасибо за любую помощь!

1 Ответ

2 голосов
/ 29 января 2020

Тем временем я нашел ответ на свой вопрос благодаря Axe319 :

Среда Spyder IDE работала на 64-битной версии python, благодаря чему программа работала без сбоев и без вопросы. Тем не менее мой python интерпретатор по-прежнему был 32-битной версией python.

Шаги, предпринятые для решения проблемы:

  • удаление python 32-битная версия
  • установить python 64-битная версия
  • установить все используемые пакеты снова, используя pip install -packages-
  • установить PyInstaller снова, используя pip install pyinstaller
  • Скомпилировать запрограммируйте в .exe, используя PyInstaller

После этого все, кажется, работает!

...