为了账号安全,请及时绑定邮箱和手机立即绑定

用PyInstaller捆绑数据文件(-onefile)

用PyInstaller捆绑数据文件(-onefile)

POPMUISE 2019-06-16 16:18:59
用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个赞

更新版本的PyInstaller不设置env变了,所以Shish很棒回答不会起作用的。现在,路径被设置为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)


查看完整回答
反对 回复 2019-06-16
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

pyinstaller将数据解压缩到一个临时文件夹中,并将此目录路径存储在_MEIPASS2环境变量为了得到_MEIPASS2在压缩模式下使用dir,并在解压缩(开发)模式下使用本地目录,我使用如下:

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"


查看完整回答
反对 回复 2019-06-16
?
Qyouu

TA贡献1786条经验 获得超11个赞

所有其他答案都使用当前工作目录如果应用程序不是PyInSTACK(即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)


查看完整回答
反对 回复 2019-06-16
  • 3 回答
  • 0 关注
  • 1114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信