繁体   English   中英

使用 pyinstaller 将 .py 转换为 .exe 后,exe 文件不会启动

[英]Exe file wont launch after converting .py to .exe with pyinstaller

我有一个 minecraft 项目,在使用以下命令将其转换为 exe 后:

pyinstaller "F:\pythonprojetcs\minecraft file mover\splashscreen.py" -F --icon="F:\pythonprojetcs\minecraft file mover\app.ico"

它不会启动。 这是错误:

Traceback (most recent call last):
  File "splashscreen.py", line 21, in <module>
    image = tk.PhotoImage(file=image_file)
  File "tkinter\__init__.py", line 4064, in __init__
  File "tkinter\__init__.py", line 4009, in __init__
_tkinter.TclError: couldn't open "C:\Users\REINER~1\AppData\Local\Temp\_MEI248722\data\image.png": no such file or directory
[4692] Failed to execute script splashscreen

当它是 .py 格式时,它工作正常,但有错误。 它说 tkinter 是错误,但我不明白。

编码:

# create a splash screen, 80% of display screen size, centered,
# displaying a GIF image with needed info, disappearing after 5 seconds
import os
import tkinter as tk
import shutil
import time


root = tk.Tk()
root.overrideredirect(True)
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
root.geometry('%dx%d+%d+%d' % (width*0.8, height*0.8, width*0.1, height*0.1))

image_file = os.path.dirname(__file__) + '\\data\\image.png'
image = tk.PhotoImage(file=image_file)
canvas = tk.Canvas(root, height=height*0.8, width=width*0.8, bg="brown")
canvas.create_image(width*0.8/2, height*0.8/2, image=image)
canvas.pack()

root.after(2000, root.destroy)
root.mainloop()

print("Világ vagy textúrát akkarsz? (világ = 1 / textúra = 2 / világ másolás = 3 / tutorial = 4)")
choosing = input()

if choosing == "1":
    print("\n")
    print("\n")
    print("Ok, szóval világ.")
    print("Hol van?")
    original = input()
    target = 'C:\\Users\\Refi\\AppData\\Roaming\\.minecraft\\saves'
    shutil.move(original,target)
    time.sleep(1)
    print("Kész!")
    print("Ha ezt írja ki: FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Reiner Regő\\Downloads\\test', akkor az a fálj nem létezik!")
    print("Kérlek várj! Ne zárd be!")
    time.sleep(3)
if choosing == "2":
    print("\n")
    print("\n")
    print("Ok, szóval textúra.")
    print("Hol van?")
    original = input()
    target = 'C:\\Users\\Refi\\AppData\\Roaming\\.minecraft\\resourcepacks'
    shutil.move(original,target)
    time.sleep(1)
    print("Kész!")
    print("Ha ezt írja ki: FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Reiner Regő\\Downloads\\test', akkor az a fálj nem létezik!")
    print("Kérlek várj! Ne zárd be!")
    time.sleep(3)

if choosing == "3":
    print("\n")
    print("\n")
    print("Ok, szóval világot akarsz másolni.")
    print("Mi a neve?")
    inputfromuser = input()
    original = 'C:\\Users\\Refi\\AppData\\Roaming\\.minecraft\\saves\\' + inputfromuser
    target = 'D:'
    shutil.move(original,target)
    time.sleep(1)
    print("Kész! A D:-ben fogod megtlálni!")
    print("Ha ezt írja ki: FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Refi\\Downloads', akkor az a fálj nem létezik!")
    print("Kérlek várj! Ne zárd be!")
    time.sleep(3)

    print('\n')
    input("nyomd meg az entert a kilépéshez")

这将文件从一个目录复制到另一个目录,闪屏代码只是一个示例。 请帮忙!

您的脚本正在尝试从相对于脚本本身的目录访问图像文件; 这在脚本安装解包时有效,资源实际上在文件系统上。 但是当捆绑到一个可执行文件中时,它就不起作用了; 除非您将其与可执行文件一起复制,否则该图像不会存在(解决方案的丑陋破解); 您需要将其捆绑到可执行文件本身中,以便您的脚本可以在运行时提取它。

您需要阅读有关规范文件的文档,特别是添加数据文件(在构建时将数据与可执行文件捆绑)并使用模块中的数据文件(在运行时提取 memory 中的捆绑数据)。

您只能访问文件中的数据,它不再是磁盘上的文件,因此您需要使用其他加载方式,例如从 base64 编码数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM