用PyInstaller捆绑数据文件(-onefile)我试图用PyInstaller构建一个文件EXE,它包括一个图像和一个图标。我不能为了我的一生让它和我一起工作--onefile.如果我做了--onedir一切都很好。当我用--onefile,它无法找到引用的附加文件(在运行已编译的EXE时)。它发现DLL和其他一切都很好,只是找不到这两个图像。我查看了运行EXE时生成的temp-dir(\Temp\_MEI95642\)并且文件确实在那里。当我把EXE放在临时目录中时,它会找到它们。非常令人困惑。这就是我添加到.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更新,将较新的答案标记为正确。
3 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
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)
MMMHUHU
TA贡献1834条经验 获得超8个赞
_MEIPASS2
_MEIPASS2
def resource_path(relative): return os.path.join( os.environ.get( "_MEIPASS2", os.path.abspath(".") ), relative )
# in development>>> resource_path("app_icon.ico")"/home/shish/src/my_app/app_icon.ico"# in production>>> resource_path("app_icon.ico")" /tmp/_MEI34121/app_icon.ico"
Qyouu
TA贡献1786条经验 获得超11个赞
sys._MEIPASS
import sysimport osdef resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path)
添加回答
举报
0/150
提交
取消