我正在尝试使用自动 py 到 exe 构建一个 .exe 文件。在我提供的 PyCharm 代码中工作正常并且字体显示正确,但是当我构建 exe 文件并运行它时,我收到此错误:
FileNotFoundError: [WinError 2]: 'C:\\Users\\test\\AppData\\Local\\Temp\\_MEI21562\\tkextrafont'
我该如何修复它,以便 myapp.exe 正确显示字体?
from tkinter import Tk, Label
from tkextrafont import Font
def resource_path(relative_path):
base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
root = Tk()
font_reg = Font(file=resource_path('./font/Manrope-Regular.ttf'), family='Manrope')
label = Label(text="test",font=('Manrope', 30, 'bold'))
label.pack()
root.mainloop()
尝试更改路径,无论有没有resource_path函数,都不起作用。
不确定您是否还需要这个,但我遇到了同样的问题并最终找到了解决方案。
问题是
tkextrafont
库里面有一些二进制文件。如果你查看你的 venv,你会发现类似这样的东西
venv\Lib\site-packages\tkextrafont:
__init__.py
extrafont.tcl
fontnameinfo.tcl
futmp.tcl
libextrafont.dll
pkgIndex.tcl
pyinstaller
似乎没有复制这个文件夹(我不知道为什么,但临时构建文件夹中没有tkextrafont
文件夹)。因此,tkextrafont
无法cd
到此文件夹并运行二进制文件。
您可以使用
--add-data
参数手动将此文件夹添加到 .exe。像这样的东西
pyinstaller --onefile --add-data TKEXTRAFONT_PATH;tkextrafont main.py
,其中 TKEXTRAFONT_PATH 是
tkextrafont
文件夹的路径,例如 C:\\Users\\name\\projects\\test\\venv\\Lib\\site-packages\\tkextrafont
(您也可以将此 tkextrafont 文件夹复制到某处以获得更短、更持久的路径)。