使用--onefile选项添加文本文件

时间:2019-06-28 02:19:38

标签: python-3.x pyinstaller

--add-data选项在不使用--onefile选项的情况下效果很好

我希望将数据文本文件压缩并合并为exe文件。但是exe文件仅在数据文本文件位于同一文件夹中时有效。

如何将文本文件合并到一个exe文件中?

当我使用时:

pyinstaller --add-data ="\GameUserSettings.ini;." file.py

有效。

pyinstaller --onefile --add-data ="\GameUserSettings.ini;." file.py

它可以制作file.exe,但效果不佳。并且仅在文本文件位于同一文件夹中时有效。

1 个答案:

答案 0 :(得分:0)

当您使用one-dir添加文本文件时,Pyinstaller会将文件放在可执行文件旁边,通过脚本访问文件(例如open("myfile.txt")会很好。但是,当您创建自己的文件时,具有--onefile的可执行文件,它将在一个单独的目录temp目录中提取文件,因此调用open("myfile.txt")会导致NotFound错误,因为该文件除了可执行文件之外不存在。因此,您需要更改指向temp目录的路径。sys._MEIPASS将返回temp目录,因此您需要在其中定位文件。您可以在here中找到更多信息。

像这样的函数可以解决问题:

import sys
import os


def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

然后,您可以使用source = resource_path("myfile.txt")访问文件。