Подтвердить что ты не робот

Приложение Pyqt4-pyqtgraph рекурсивно открывает новые экземпляры себя

Я выделил BMDanalyse для моего проекта и изменил его.

Инструкции по установке, если вам нужна рука. Фактический вопрос следует этому.

Требуется 64-разрядная система из-за требований к памяти. Убедитесь, что у вас 64-битный Python 2.7.

Следующие инструкции по настройке работают с Pycharm в Windows или Ubuntu, хотя вы хотите, чтобы он работал в Windows с моего проблема заключается в создании .exe:

Требуются следующие пакеты. Не забудьте выбрать 64-битные. В случаях, когда ссылки предоставляются, вы не сможете просто устанавливать пакеты через Pycharm.

После открытия проекта BMDanalyse вы можете запустить SPCanalyse.py, чтобы запустить приложение. У этого есть ошибки и очень ранний прототип. Загрузите следующий пример данных, чтобы убедиться, что он работает по назначению.

Следующее должно работать, если вы сделаете это по порядку. Вы можете, конечно, проверить свою консоль IDE на то, что делает приложение (еще не добавил индикаторы выполнения)

  • щелкните файл, загрузите изображения, загрузите оба изображения. Нажмите "Выравнивание". После того, как приложение выполнит свою работу, в папке "Загрузки" появится файл с именем aligned.raw
  • загрузите изображение alignment.raw. "alignment.raw" появится в списке справа. Нажмите на alignment.raw. Нажмите ROI, добавьте ROI → многоугольник. Нарисуйте два полигона, как показано на следующем рисунке: введите описание изображения здесь После того, как у вас есть рентабельность инвестиций, нажмите "Анализ" → "Анализ ROI". ROI.raw должен появиться в папке с загрузкой.
  • Загрузить ROI.raw. Нажмите на него. Нажмите временной фильтр. Через некоторое время dfoverf0_avg_framesIncl.raw должно появиться в папке с загрузкой
  • Загрузить dfoverf0_avg_framesIncl.raw. Нажмите на него. Экран должен быть черным. Удалите ROI, если они все еще там. Теперь щелкните в случайных местах на черной сцене. То, что вы видите, карты корреляции семенных пикселей

Если все эти 4 шага работают, приложение работает в соответствии с вашей системой.


Актуальный вопрос

Однако теперь, когда он работает, мне нужен автономный .exe этого приложения, который работает без каких-либо зависимостей, чтобы показать, что мой руководитель может быть выполнен.

Если я использую python SPCanalyse.py на моем основном script в проекте, он запускается, и мое приложение появляется.

Обновление: Мой ноутбук был украден. Однако при настройке на чистую систему меня поражают разные проблемы. Единственное, что я могу думать о том, что я сделал по-другому, это то, что я не полагался на Anaconda из Continuum analytics для управления пакетами.

Если я использую pyinstaller SPCanalyse.py на моем основном script, я получаю .exe, и если я запустил этот .exe, во-первых, я заметил, что мои значки отсутствуют. Во-вторых, это происходит:

введите описание изображения здесь

Когда я нажимаю кнопку выравнивания (т.е. переходите к шагу 1 в настройке), приложение зависает (т.е. не отвечает), а затем повторно открывает новые isntances. Я предполагаю, что это связано с памятью, поскольку для этой операции требуется значительная ее часть. Если я посмотрю, сколько памяти занимает приложение (смотря только на оригинальный "не отвечающий" экземпляр), я вижу его плато ровно в 1,180.8 МБ каждый раз. Принимая во внимание все другие запущенные процессы, хотя я все еще использую только 28% своей памяти на 32 ГБ. Я попытался установить приоритет приложения, чтобы он не был высоким. Я также попробовал открыть через командную строку, чтобы узнать, есть ли какое-либо полезное сообщение об ошибке. К сожалению нет.

Обратите внимание, что шаги 2-3 работают по назначению! Шаг 4 приводит к тому же рекурсивному циклу open-self при нажатии на черную сцену.

Я думаю, что нашел объяснение того, что произошло здесь: https://github.com/rdicosmo/parmap

Конечно, если у вас есть открытые каналы или файлы или другие соединения, которые должны использоваться только родительским процессом, программа может вести себя очень странно: в качестве примера не открывайте перед вызовом примитива Parmap и не используйте это если ваша программа многопоточная!

Таким образом, я уверен, что я использую пармап очень неправильно. Я по-прежнему смущен, почему мое приложение работает, если я запускаю я через свою IDE, хотя!

Старая неразрешенная проблема, которая теперь является моей проблемой вора

Если я использую pyinstaller SPCanalyse.py на моем основном script следующих выводах, когда я пытаюсь запустить результирующий .exe

D:\Home\Downloads\BMDanalyse\BMDanalyse>D:\Home\Downloads\BMDanalyse\BMDanalyse\
dist\SPCanalyse\SPCanalyse.exe
Traceback (most recent call last):
  File "<string>", line 21, in <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "BMDanalyse\SPCExplorer\filter_jeff.py", line 9, in <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\image_registration\__init__.py", line 1, in <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\image_registration\cross_correlation_shifts.py", line 4, i
n <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\image_registration\fft_tools\__init__.py", line 3, in <mod
ule>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\image_registration\fft_tools\correlate2d.py", line 2, in <
module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\image_registration\fft_tools\convolve_nd.py", line 329, in
 <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\pytest.py", line 21, in <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\_pytest\config.py", line 11, in <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\_pytest\_code\__init__.py", line 2, in <module>
  File "c:\users\cornelis\appdata\local\temp\pip-build-6xhsyv\pyinstaller\PyInst
aller\loader\pyimod03_importers.py", line 389, in load_module
  File "site-packages\_pytest\_code\code.py", line 8, in <module>
  File "site-packages\py\_apipkg.py", line 125, in __makeattr
  File "site-packages\py\_apipkg.py", line 48, in importobj
ImportError: No module named _builtin
SPCanalyse returned -1

Сначала я думал, что моя проблема связана с Нет модуля с именем builtins, поэтому я обновил мою setup.py, чтобы включить все возможные пакеты, которые могли бы найти, что мой проект удаленно зависит от:

install_requires = [
    'pyinstaller'
    'future'
    'astropy',
    'image_registration',
    'scipy',
    'FITS_tools',
    'pywcs',
    'pyfits',
    'pytest',
    'parmap',
    'setuptools',
    'pyqtgraph',        
    'matplotlib',
    'numpy',
    'PIL',
    'SPCExplorer',
    ],

Я также пробовал python setup.py build, и я получаю:

D:\Home\Downloads\BMDanalyse>python setup.py build
running build
running build_py
creating build
creating build\lib
creating build\lib\BMDanalyse
copying BMDanalyse\customItems.py -> build\lib\BMDanalyse
copying BMDanalyse\matplotlib_fix.py -> build\lib\BMDanalyse
copying BMDanalyse\ordereddict.py -> build\lib\BMDanalyse
copying BMDanalyse\ROI.py -> build\lib\BMDanalyse
copying BMDanalyse\SidePanel.py -> build\lib\BMDanalyse
copying BMDanalyse\SPCanalyse.py -> build\lib\BMDanalyse
copying BMDanalyse\version.py -> build\lib\BMDanalyse
copying BMDanalyse\ViewBoxCustom.py -> build\lib\BMDanalyse
copying BMDanalyse\__init__.py -> build\lib\BMDanalyse
creating build\lib\BMDanalyse\icons
copying BMDanalyse\icons\arrow-down-2.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\arrow-left.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\arrow-right.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\arrow-up-2.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\filesave.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\file_add.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\file_copy.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\file_delete2.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\green-add3.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\logo.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\opened-folder.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\polygonIcon.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\README.txt -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\rectangularIcon.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\icons\red_delete.png -> build\lib\BMDanalyse\icons
copying BMDanalyse\changeLog.txt -> build\lib\BMDanalyse
creating build\lib\BMDanalyse\sampleMedicalImages
creating build\lib\BMDanalyse\sampleMedicalImages\Implant
creating build\lib\BMDanalyse\sampleMedicalImages\Implant\XYplane
copying BMDanalyse\sampleMedicalImages\Implant\XYplane\vxray_XY_1.png -> build\l
ib\BMDanalyse\sampleMedicalImages\Implant\XYplane
copying BMDanalyse\sampleMedicalImages\Implant\XYplane\vxray_XY_11.png -> build\
lib\BMDanalyse\sampleMedicalImages\Implant\XYplane
copying BMDanalyse\sampleMedicalImages\Implant\XYplane\vxray_XY_21.png -> build\
lib\BMDanalyse\sampleMedicalImages\Implant\XYplane
copying BMDanalyse\sampleMedicalImages\Implant\XYplane\vxray_XY_31.png -> build\
lib\BMDanalyse\sampleMedicalImages\Implant\XYplane
copying BMDanalyse\sampleMedicalImages\Implant\XYplane\vxray_XY_6.png -> build\l
ib\BMDanalyse\sampleMedicalImages\Implant\XYplane
creating build\lib\BMDanalyse\sampleMedicalImages\Implant\YZplane
copying BMDanalyse\sampleMedicalImages\Implant\YZplane\vxray_YZ_1.png -> build\l
ib\BMDanalyse\sampleMedicalImages\Implant\YZplane
copying BMDanalyse\sampleMedicalImages\Implant\YZplane\vxray_YZ_11.png -> build\
lib\BMDanalyse\sampleMedicalImages\Implant\YZplane
copying BMDanalyse\sampleMedicalImages\Implant\YZplane\vxray_YZ_21.png -> build\
lib\BMDanalyse\sampleMedicalImages\Implant\YZplane
copying BMDanalyse\sampleMedicalImages\Implant\YZplane\vxray_YZ_31.png -> build\
lib\BMDanalyse\sampleMedicalImages\Implant\YZplane
copying BMDanalyse\sampleMedicalImages\Implant\YZplane\vxray_YZ_6.png -> build\l
ib\BMDanalyse\sampleMedicalImages\Implant\YZplane
creating build\lib\BMDanalyse\sampleMedicalImages\No implant
creating build\lib\BMDanalyse\sampleMedicalImages\No implant\XYplane
copying BMDanalyse\sampleMedicalImages\No implant\XYplane\noimplant_XY_1.png ->
build\lib\BMDanalyse\sampleMedicalImages\No implant\XYplane
copying BMDanalyse\sampleMedicalImages\No implant\XYplane\noimplant_XY_11.png ->
 build\lib\BMDanalyse\sampleMedicalImages\No implant\XYplane
copying BMDanalyse\sampleMedicalImages\No implant\XYplane\noimplant_XY_21.png ->
 build\lib\BMDanalyse\sampleMedicalImages\No implant\XYplane
copying BMDanalyse\sampleMedicalImages\No implant\XYplane\noimplant_XY_31.png ->
 build\lib\BMDanalyse\sampleMedicalImages\No implant\XYplane
copying BMDanalyse\sampleMedicalImages\No implant\XYplane\noimplant_XY_6.png ->
build\lib\BMDanalyse\sampleMedicalImages\No implant\XYplane
creating build\lib\BMDanalyse\sampleMedicalImages\No implant\YZplane
copying BMDanalyse\sampleMedicalImages\No implant\YZplane\noimplant_YZ_1.png ->
build\lib\BMDanalyse\sampleMedicalImages\No implant\YZplane
copying BMDanalyse\sampleMedicalImages\No implant\YZplane\noimplant_YZ_11.png ->
 build\lib\BMDanalyse\sampleMedicalImages\No implant\YZplane
copying BMDanalyse\sampleMedicalImages\No implant\YZplane\noimplant_YZ_21.png ->
 build\lib\BMDanalyse\sampleMedicalImages\No implant\YZplane
copying BMDanalyse\sampleMedicalImages\No implant\YZplane\noimplant_YZ_31.png ->
 build\lib\BMDanalyse\sampleMedicalImages\No implant\YZplane
copying BMDanalyse\sampleMedicalImages\No implant\YZplane\noimplant_YZ_6.png ->
build\lib\BMDanalyse\sampleMedicalImages\No implant\YZplane

Когда я иду туда, где все это "построено", я вижу, что отсутствует папка с абсолютно необходимыми сценариями в моей программе. Возможно, это намекает на то, что вызывает мою ошибку? См. Изображение того, что выполняется build (нет папки SPCExplorer):

введите описание изображения здесь

Я не знаю, обязательно ли это или setup.py связано с тем, почему запуск .exe дает мне ошибку, хотя

4b9b3361

Ответ 1

Таким образом, проблема действительно вызвана многопроцессорностью. Однако, если вы используете многопроцессорный pyinstaller google, вы можете найти this

Итак, как оказалось

Просто добавьте multiprocessing.freeze_support() после if __name__=='__main__': в вашем основном файле (SPCanalyse.py в моем случае) и добавьте import multiprocessing в начало файла.

Моя программа теперь работает как автономный .exe и отвечает всем четырем перечисленным требованиям