使用 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")
这会将文件从一个目录复制到另一个目录,启动画面代码只是一个示例。
请帮忙!
您的脚本试图从与脚本本身相关的目录访问图像文件;这在脚本安装解压时有效,资源实际上在文件系统上。但是当捆绑到一个可执行文件中时,那是行不通的;图像不会在那里,除非你已经将它复制到可执行文件中(一个丑陋的解决方案);您需要将其捆绑到可执行文件本身,以便您的脚本可以在运行时提取它。
您需要阅读the docs on spec files, specifically, adding data files (to bundle the data with the executable when you build it) and using data files from a module(以在运行时提取内存中的捆绑数据)。
您将只能访问文件中的 数据,它不再是磁盘上的文件,因此您需要 use alternate means of loading, e.g. from base64 encoded data .
我有一个 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")
这会将文件从一个目录复制到另一个目录,启动画面代码只是一个示例。 请帮忙!
您的脚本试图从与脚本本身相关的目录访问图像文件;这在脚本安装解压时有效,资源实际上在文件系统上。但是当捆绑到一个可执行文件中时,那是行不通的;图像不会在那里,除非你已经将它复制到可执行文件中(一个丑陋的解决方案);您需要将其捆绑到可执行文件本身,以便您的脚本可以在运行时提取它。
您需要阅读the docs on spec files, specifically, adding data files (to bundle the data with the executable when you build it) and using data files from a module(以在运行时提取内存中的捆绑数据)。
您将只能访问文件中的 数据,它不再是磁盘上的文件,因此您需要 use alternate means of loading, e.g. from base64 encoded data .