我正在尝试通过Pyinstaller打包一个使用标准Python库和Tkinter GUI构建的简单applet,以进行分发。 PyInstaller编译(正确的术语?)很好,但是当我打开exe时,得到以下信息:
Traceback (most recent call last):
File "site-packages/PyInstaller/loader/rthooks/pyi_rth__tkinter.py", line 28, in <module>
FileNotFoundError: Tcl data directory "/var/folders/sj/r0yyz8393ld2xrd_wf65bwxr0000gn/T/_MEIDeFnFy/tcl" not found.
[67821] Failed to execute script pyi_rth__tkinter
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
我尝试调整编译设置,例如将--hidden-import tkinter
添加为无效。
这是脚本:
import math
import tkinter as tk
from tkinter import simpledialog as sd
grades = []
def convert(grades):
#long function here
def get_num_classes():
while True:
try:
global num_classes
num_classes = sd.askinteger("number of classes", "Number of classes: ")
return num_classes
except ValueError:
print('Try again')
def get_current():
global current_gpa
current_gpa = sd.askfloat("current gpa", "Current GPA: ")
return current_gpa
def grade_append():
y = 0
while y < num_classes:
grade = sd.askstring("grade", "Letter Grade: ")
grade = grade.upper()
grades.append(grade)
y = y+1
def calculate(grade_points, current_gpa, classes):
global cum_gpa
gpa = grade_points / classes
cum_gpa = (gpa + current_gpa) / 2
return cum_gpa
root = tk.Tk()
root.title("GPA Calculator")
root.geometry("225x50")
get_num_classes()
get_current()
grade_append()
total_points = convert(grades)
calculate(total_points, current_gpa, num_classes)
cum_gpa = round(cum_gpa, 2)
print(cum_gpa)
print(grades)
w = tk.Label(root, text="Your new cumulative GPA is %s" % (cum_gpa))
w.pack()
tk.mainloop()
答案 0 :(得分:1)
这似乎是在OS X上使用--onefile
的已知问题
从拥有python脚本的目录中尝试
pyinstaller --onefile --add-binary='/System/Library/Frameworks/Tk.framework/Tk':'tk' --add-binary='/System/Library/Frameworks/Tcl.framework/Tcl':'tcl' your_script.py
此解决方案在公开问题here中被建议
答案 1 :(得分:0)
这是我的回答,我认为这将为您提供帮助:
pyinstaller --onefile --add-binary='/System/Library/Frameworks/Tk.framework/Tk':'tk' --add-binary='/System/Library/Frameworks/Tcl.framework/Tcl':'tcl' your_script.py
或者没有控制台代码是:
pyinstaller --onefile --noconsole --add-binary='/System/Library/Frameworks/Tk.framework/Tk':'tk' --add-binary='/System/Library/Frameworks/Tcl.framework/Tcl':'tcl' your_script.py