Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy应用程序在Pyinstaller启动时崩溃_Python_Kivy_Pyinstaller - Fatal编程技术网

Python Kivy应用程序在Pyinstaller启动时崩溃

Python Kivy应用程序在Pyinstaller启动时崩溃,python,kivy,pyinstaller,Python,Kivy,Pyinstaller,我将kivy 1.11.1与python 3.7.6 windows 10和Pyinstall 4.0结合使用。我的应用程序运行得很好,当我安装pyinstall时,一切都正常运行。但是当我启动文件时,exe会在启动时启动崩溃应用程序 守则的一部分: from kivy.app import App from kivy.base import EventLoop from kivy.core.audio import SoundLoader from kivy.utils import ge

我将kivy 1.11.1与python 3.7.6 windows 10和Pyinstall 4.0结合使用。我的应用程序运行得很好,当我安装pyinstall时,一切都正常运行。但是当我启动文件时,exe会在启动时启动崩溃应用程序

守则的一部分:

from kivy.app import App
from kivy.base import EventLoop

from kivy.core.audio import SoundLoader

from kivy.utils import get_color_from_hex
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen



Builder.load_string("""
<HomeScreen>:
    BoxLayout:
        orientation: 'vertical'
        canvas.before:
            Color:
                rgba: (0.6, 0.6, 0.6, 0.8)
            Rectangle:
                pos: self.pos
                size: self.size
                source: "images_bg/help_bg.jpg"

""")


class Entry(Screen):
    pass
    


class MultiAudio:
    _next = 0

    def __init__(self, filename, count):
        self.buf = [SoundLoader.load(filename)
                    for i in range(count)]

    def play(self):
        self.buf[self._next].play()
        self._next = (self._next + 1) % len(self.buf)
    def stop(self):
        self.buf[self._next].stop()
        self._next = (self._next + 1) % len(self.buf)

entry = MultiAudio('music/entry.wav', 5)
        
# Create the screen manager
sm = ScreenManager()
sm.add_widget(Entry(name='entry'))


class EntryApp(App):
    def build(self):
        EventLoop.ensure_window()
        return sm

    Window.clearcolor = get_color_from_hex('111110') #('111110')   


app = EntryApp()
if __name__ == '__main__':
    app.run()
然后我更新spec文件,在Collect中添加数据和树,exe文件工作

main.spec:

# -- mode: python ; coding: utf-8 --
from kivy.tools.packaging.pyinstaller_hooks import install_hooks
install_hooks(globals())
from kivy_deps import sdl2, glew
import kivy.core.audio
import kivy.core.image

block_cipher = None

a = Analysis(['main.py'],
pathex=['C:\Users\acer\Downloads\test'],
binaries=[],
datas=[('C:\Users\acer\Downloads\test\images_bg', 'images_bg'),
],
hiddenimports=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False , icon='test.ico')
coll = COLLECT(exe, Tree('C:\Users\acer\Downloads\test\'),
a.binaries,
a.zipfiles,
a.datas,
strip=False,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
upx=True,
upx_exclude=[],
name='main')
Qaund我正在尝试使用以下代码创建一个文件:

Pyinstaller --onefile --icon=test.ico main.py
然后更新等级库文件:

# -*- mode: python ; coding: utf-8 -*-
from kivy_deps import sdl2, glew
import kivy.core.audio 
import kivy.core.image 


block_cipher = None


a = Analysis(['main.py'],
             pathex=['C:\Users\acer\Downloads\test'],
             binaries=[],
             datas=[('C:\Users\acer\Downloads\test\images_bg', 'images_bg')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False , icon='test.ico')
我在启动时遇到以下错误:

[WARNING] [AudioSDL2   ] Unable to load music/entry.wav: b'Mix_LoadWAV_RW with NULL src'
[ERROR  ] [Image       ] Error reading file images_bg/help_bg.jpg
 Traceback (most recent call last):
   File "main.py", line 1642, in <module>
   File "kivy\uix\relativelayout.py", line 265, in __init__
   File "kivy\uix\floatlayout.py", line 65, in __init__
   File "kivy\uix\layout.py", line 76, in __init__
   File "kivy\uix\widget.py", line 361, in __init__
   File "kivy\uix\widget.py", line 469, in apply_class_lang_rules
[WARNING][AudioSDL2]无法加载音乐/entry.wav:b'Mix_LoadWAV_RW with NULL src'
[错误][图像]读取文件图像时出错\u bg/help\u bg.jpg
回溯(最近一次呼叫最后一次):
文件“main.py”,第1642行,在
文件“kivy\uix\relativelayout.py”,第265行,在_init中__
文件“kivy\uix\floatlayout.py”,第65行,在__
文件“kivy\uix\layout.py”,第76行,在__
文件“kivy\uix\widget.py”,第361行,在__
文件“kivy\uix\widget.py”,第469行,在apply\u class\u lang\u规则中

您的
数据
行:

datas=[('C:\Users\acer\Downloads\test\images_bg', '.'),
],
应该是:

datas=[('C:\Users\acer\Downloads\test\images_bg', 'images_bg'),
],
这将把图像放在与您的:

source: "images_bg/help_bg.jpg"

你的应用程序中是否有硬编码的
help\u bg.jpg
路径?是的,该路径在应用程序中是硬编码的。我添加了部分代码。解决方案使用此函数此代码Pyinstaller--onefile--onedir--windowed--noconsole--clean main.py但当我尝试使用此代码获取单个文件时,出现了一个错误,它被标记为致命错误Pyinstaller--onefile--windowed--noconsole--clean main.py,只有一个文件,我们无法添加树('C:\Users\acer\Downloads\test\'),因为没有收集器。请注意,这些命令中的任何一个都会覆盖
main.spec
。因此,您对
main.spec
所做的任何更改都会丢失。通常,您会运行
Pyinstaller[选项]main.py
一次,然后编辑
main.spec
。然后运行
Pyinstaller main.spec
。还要注意,当您使用
spec
文件运行时,只有某些命令行选项有效。请参阅。我更新了我的问题。我不明白的是,当我想要一个文件时,会出现以下错误:[WARNING][AudioSDL2]无法加载music/entry.wav:b'Mix_LoadWAV_RW with NULL src'[错误][图像]读取文件images\u bg/help\u bg.jpg时出错。您有什么想法吗?您是否清楚,除非运行
Pyinstaller main.spec
,否则对
main.spec
所做的更改将无效?此外,您需要以与图像类似的方式包含声音文件。要访问这些文件,您可能需要使用。我有一个问题:您知道如何使用Builder.load_字符串文件的相对路径吗?但我有这个错误
source: "images_bg/help_bg.jpg"