pyinstaller 打包错误

我用kivy(一个gui开发模块)制作了一个简单的gui程序,idle运行正常,代码如下:

import os
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager,Screen
class ConnectPage(GridLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.cols = 2
        if os.path.isfile("C:/Users/Administrator/Desktop/informations.txt"):
            with open("C:/Users/Administrator/Desktop/informations.txt","r") as f:
                d = f.read().split(",")
                prev_ip = d[0]
                prev_port = d[1]
                prev_username = d[2]
        else:
            prev_ip = ""
            prev_port = ""
            prev_username = ""

        self.add_widget(Label(text="IP:"))
        self.ip = TextInput(text=prev_ip,multiline=False)
        self.add_widget(self.ip)
        self.add_widget(Label(text="Port:"))
        self.port = TextInput(text=prev_port,multiline=False)
        self.add_widget(self.port)
        self.add_widget(Label(text="Username:"))
        self.username = TextInput(text=prev_username,multiline=False)
        self.add_widget(self.username)
        self.join = Button(text="Join")
        self.join.bind(on_press=self.join_button)
        self.add_widget(Label())
        self.add_widget(self.join)
    def join_button(self,type):
        port = self.port.text
        ip = self.ip.text
        username = self.username.text
        with open("C:/Users/Administrator/Desktop/informations.txt","w") as f:
            f.write(f"{ip},{port},{username}")
        info = f"Attempting to join {ip}:{port} as {username}"
        chat_app.info_page.update_info(info)
        chat_app.screen_manager.current = "Info"
class InfoPage(GridLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.cols = 1
        self.message = Label(halign="center",valign="middle",font_size=30)
        self.message.bind(width=self.update_text_width)
        self.add_widget(self.message)
    def update_info(self,message):
        self.message.text = message
    def update_text_width(self,*_):
        self.message.text_size = (self.message.width*0.9,None)
class EpicApp(App):
    def build(self):
        self.screen_manager = ScreenManager()
        self.connect_page = ConnectPage()
        screen = Screen(name="Connect")
        screen.add_widget(self.connect_page)
        self.screen_manager.add_widget(screen)
        self.info_page = InfoPage()

        screen = Screen(name="Info")
        screen.add_widget(self.info_page)
        self.screen_manager.add_widget(screen)
        return self.screen_manager
if __name__ == "__main__":
    chat_app = EpicApp()
    chat_app.run()

当我在命令行输入pyinstaller -F main.py(上面代码文件),打包没有异常。
之后我尝试打开exe,报错了:

pyinstaller打包错误
(这是我在闪退的瞬间拍到的)
经过一段时间,我按照kivy打包指南,先弄spec文件,修改,然后编译。结果是一样的错误。

我又试着后面加上–hidden-import pyg_resources.py2_warn。
但还是报了同样的错误。

有哪位大佬知道如何解决?

coder Derek
Jason990420
最佳答案

setuptools降级到44.0.0重新打包, 试试

pip install setuptools==44.0.0
4年前 评论
Coolest (楼主) 4年前
Jason990420 (作者) 4年前
讨论数量: 2
Jason990420

setuptools降级到44.0.0重新打包, 试试

pip install setuptools==44.0.0
4年前 评论
Coolest (楼主) 4年前
Jason990420 (作者) 4年前

奋斗了2天,问题解决了。由于kivy在中国很冷门,所以遇到问题的时候要等很久。希望我这个问题能帮助到下一代kivy用户。我的解决办法就是:在源代码中加入一个import pkg_resources.py2_warn。

4年前 评论
Jason990420 4年前
Coolest (作者) (楼主) 4年前
Jason990420 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!