python - Python 构建 exe 文件在 conda 提示符下成功运行,但在运行时退出
问题描述
这是代码,
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()
我已经使用 pyinstaller 构建了 exe,例如
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 等,如果我错了,抱歉)
解决方案
真正的问题是 pymatting 用于 numpy 函数np.linalg.norm
,np.inner
这两个导致实时应用程序退出。我用替代品替换了这两个功能scipy.linalg.norm and manual inner function
。Pyinstaller 或 cx_freeze 在构建应用程序时不会使用这两个函数。所以它在 conda 提示环境之外失败了
推荐阅读
- azure - Azure Functions Core Tools 使用默认函数抛出错误:找不到 ../azurefunctions/functions.js
- gcc - 如何将 zstd 库静态链接到我的动态库?
- python - 将 ISO 8601 时间格式转换为 UNIX 时间戳(纪元)并再次返回而不会丢失小数秒?
- hyperledger-fabric - 是否可以更新或更改部署在 Hyperledger 网络中的智能合约(链码)
- kotlin - Is there any way to declare a scope extension to third party library kotlin class?
- java - 如何使用 Java POI 在 Excel 中将多种日期格式转换为一种标准格式
- php - Bigcommerce 自定义私有应用程序开发店面内容注入蓝图和模板
- python - CSV 排序?“TypeError:人口必须是一个序列或集合”。如何修复它。
- c# - 需要创建httpwebrequest以在c#中发送api post
- python - webdriver.Firefox()的参数是什么及其意义