#python #numpy #tkinter #build #pyinstaller
#python #numpy #tkinter #сборка #pyinstaller
Вопрос:
Вот код,
from pymatting import *
#import numpy as np
import tkinter as tk
root = tk.Tk()
def func():
print( "before matting")
scale = 1
print( "1")
image = load_image(r"s.png", "RGB", scale, "box")
trimap = load_image(r"tri.png", "GRAY", scale, "nearest")
print( "2")
# estimate alpha from image and trimap
alpha = estimate_alpha_knn(image, trimap)
print( "3")
# estimate foreground from image and alpha
foreground = estimate_foreground_ml(image, alpha, return_background=False)
print( "4")
# save cutout
cutout = stack_images(foreground, alpha)
save_image("2_out.png", cutout)
print( "saved")
button = tk.Button(root, text = "start",command =func)
button.pack()
root.mainloop()
Я собрал exe-файл с помощью pyinstaller, например
pyinstaller --hidden-import six --hidden-import='pkg_resources.py2_warn' --hidden-import pymatting main.py
он успешно строится, и с помощью командной строки conda ./main.exe
я могу просмотреть результат..
Но этот код продолжает сбоить, когда main.exe откройте напрямую с помощью Windows. Он завершается во время выполнения .. Программа завершается без отображения какой-либо ошибки..
(я думаю, что линейные решающие уравнения функций numpy не включаются в сборку, такие как numpy.inner или numpy.linalg и т.д. В моем анализе, извините, если я ошибаюсь)
Предложите мне способ решить эту проблему. это исходное изображение1 и его тримап 2
Комментарии:
1. Что вы имеете в виду … код продолжает сбоить … , не могли бы вы показать ошибку или более конкретно рассказать о проблеме?
2. сбой означает, что он работает не так, как ожидалось. exe-файл автоматически останавливается и завершает работу приложения.. при запуске в командной строке conda я могу просматривать выходные данные. Но при запуске в Windows он просто завершает работу программы, ошибка не отображается
3. Если код работает в целом, но exe завершается автоматически, то в какой-то части кода может быть ошибка, взгляните на приглашение, чтобы увидеть, в чем ошибка? Имейте в виду, что вам также придется скопировать exe-файл в каталог проекта. иначе, когда вы нажимаете кнопку, путь к изображению недопустим, и, следовательно, это приведет к ошибке и сбою.
4. Я скопировал изображение в каталог сборки, и оно отлично работает с командной строкой conda.. Но при общем запуске ошибка в консоли не отображается.. И просто завершается
5.
pyinstaller --hidden-import numpy --hidden-import six --hidden-import='pkg_resources.py2_warn' --hidden-import pymatting main.py
попробуйте это?
Ответ №1:
Реальная проблема заключается в том, что pymatting использует функции numpy np.linalg.norm
и np.inner
, эти два привели к завершению работы приложения реального времени. Я заменил обе функции альтернативами scipy.linalg.norm and manual inner function
. Pyinstaller или cx_freeze не будут выполнять эти две функции при сборке приложения. Таким образом, он выходит из строя вне среды командной строки conda
Комментарии:
1. Исправлена ли проблема? Почему pyinstaller не работает с numpy? У меня есть exe, созданный с помощью
numpy.linalg
. В любом случае попробуйте,pyinstaller --hidden-import numpy --hidden-import six --hidden-import='pkg_resources.py2_warn' --hidden-import pymatting main.py