我正在使用PyInstaller从python脚本创建EXE文件。
在我的脚本上,我正在使用tkinter创建一个GUI,并在该GUI上添加了一个favicon和一个图像。 因为该代码可由我的团队的任何成员在任何计算机上使用,所以图像和图标的路径应尽可能通用。 因此,我在os库中使用了以下
os.path.dirname(__file__)
还有
os.path.abspath(os.getcwd())
所以我的代码如下:
import os
images_path = os.path.dirname(__file__)
favicon_name = 'favicon.ico'
root.iconbitmap(f'{images_path}/img/{favicon_name}')
logo_name = 'logo.png'
image = Image.open(f'{images_path}/img/{logo_name}')
image = image.resize((450, 120), Image.ANTIALIAS)
logo_image = ImageTk.PhotoImage(image)
logo_image_label = tk.Label(image=logo_image)
logo_image_label.pack()
当直接从命令行调用脚本时有效,但是当使用PyInstaller创建EXE文件时,它将在运行EXE文件的文件夹中搜索图标和图像。 这意味着图像和图标应该位于EXE文件所在位置的img文件夹中。
我也尝试使用pathlib失败
import pathlib
pathlib.Path(__file__).parent.absolute()
和
import pathlib
pathlib.Path().absolute()
因为我希望能够将EXE文件单独发送给将要使用它的任何人,而无需也发送图像和图标,所以我希望在EXE创建时“冻结”此路径,因此图像和收藏夹图标无需与EXE文件位于同一文件夹中,也无需与EXE文件位于同一台计算机中。
如果我使用硬代码路径,例如“ C:/documents/pictures/logo.png”,则它将运行并且即使在运行EXE文件时该图片也不会显示在该图片中。运行EXE的计算机或设备。但是如前所述,对路径进行硬编码不是解决方案,因为脚本和PyInstaller应该可以在任何计算机上运行。
将图像和图标和EXE文件一起发送是不可行的,因为这会带来一些问题,因为用户可以更改图标和图像,而我们不会。