我正在尝试使用PyInstaller构建一个包含文件和图标的单文件EXE。我一生无法忍受--onefile。
PyInstaller
--onefile
如果我这样做了,--onedir那么一切都很好。当我使用时--onefile,它(在运行编译的EXE时)找不到引用的其他文件。它找到DLL和其他所有东西,只是找不到两个映像。
--onedir
我查看了运行EXE时生成的temp-dir(\Temp\_MEI95642\例如),并且文件确实在其中。当我将EXE放到该临时目录中时,它会找到它们。很困惑。
temp-dir(\Temp\_MEI95642\例如)
这就是我添加到.spec文件中的内容
a.datas += [('images/icon.ico', 'D:\\[workspace]\\App\\src\\images\\icon.ico', 'DATA'), ('images/loaderani.gif','D:\\[workspace]\\App\\src\\images\\loaderani.gif','DATA')]
我还要补充一点,我也尝试过不要将它们放在子文件夹中,也没有什么不同。
编辑: 由于PyInstaller更新,将较新的答案标记为正确。
较新版本的PyInstaller不再设置该env变量,因此Shish的出色答案将不起作用。现在,路径设置为sys._MEIPASS:
env
sys._MEIPASS
def resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ try: # PyInstaller creates a temp folder and stores path in _MEIPASS base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path)