【问题标题】:Pyinstaller not working with imported modulesPyinstaller 无法使用导入的模块
【发布时间】:2021-04-04 22:24:15
【问题描述】:

我正在尝试使用打开 tkinter GUI 的 Pyinstaller 构建一个单文件 EXE 文件。但出于某种原因,EXE 在运行时不会打开任何 tkinter 窗口。我写了一个快速代码来测试 Pyinstaller 是否有 tkinter 模块的问题。它看起来像这样:

import tkinter

root= tkinter.Tk()

canvas1 = tkinter.Canvas(root, width = 300, height = 300)
canvas1.pack()

def hello ():  
    label1 = tkinter.Label(root, text= 'Hello World!', fg='green', font=('helvetica', 12, 'bold'))
    canvas1.create_window(150, 200, window=label1)
    
button1 = tkinter.Button(text='Click Me',command=hello, bg='brown',fg='white')
canvas1.create_window(150, 150, window=button1)

root.mainloop()

当 tkinter 是唯一被导入的模块时,Pyinstaller 构建的 EXE 文件运行没有问题。但是当我添加我的 GUI 程序使用的所有其他导入时,编译的单文件 EXE 不再打开 tkinter 窗口:

import tkinter
import tkinter.filedialog
import os
import PIL
import numpy as np
import math
import win32api
import ctypes
import peakutils
import matplotlib
import skimage.measure
import scipy
import astropy.modeling
import cv2
import sklearn.neighbors.NearestNeighbors
import imutils
import sys

...

我阅读了导入模块的文档,其中有一些重复的依赖项(例如astropy.modeling 导入scipy)。是这种双重依赖导致 Pyinstaller 无法构建工作的 EXE,还是有其他原因?我意识到有很多导入的模块,这也是EXE不起作用的原因吗?我怎样才能解决这个问题?我还应该补充一点,Pyinstaller 在构建任何一个 EXE 时都没有返回任何错误。

【问题讨论】:

    标签: python tkinter pyinstaller


    【解决方案1】:

    这里的主要问题是“你的 .exe 文件在哪里?”。

    当您使用pyinstaller 运行某些命令时,它将创建几个包含您所需模块的文件夹。例如:

    您有一个名为 your_app.py 的应用程序需要这些模块:

    • 熊猫
    • Tkinter
    • 麻木
    • 谷歌云平台

    然后运行pyinstaller 命令,例如:

    pyinstaller -F --onedir --windowed your_app.py
    

    上述命令将生成一个包含所有依赖项的dist 文件夹。在该文件夹中,您将找到您的 .exe 文件。

    问题来了:

    如果您的应用程序正在使用来自亲属路径的信息(例如,从您电脑中的某个路径读取 csv 文件)并且您没有将该文件夹放在 dist 文件夹中,您将获得回溯。强>

    从这里找出问题的最佳方法是生成带有the console.exe 文件,以便调试您的问题。

    您可以通过从 pyinstaller 命令中删除关键字 --windowed 来实现此目的:

    pyinstaller -F --onedir your_app.py
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 2018-07-30
      • 2014-07-05
      • 1970-01-01
      相关资源
      最近更新 更多