Python 使用pyinstaller在spec文件中包含数据

Python 使用pyinstaller在spec文件中包含数据,python,pyinstaller,Python,Pyinstaller,我正在尝试捆绑一个用Python编写的应用程序,并在捆绑包中包含相关的数据文件。我添加数据的方式有什么问题 这是使用等级库文件排除某些库并包含数据文件。我运行cmdpyinstaller--onefile main.spec #-*-模式:python-*- 分组密码=无 添加了_data=[('file_one.pickle','.'), ('file_two.pickle','.'), ('file_three.pickle','.')] 排除的库=[XXX] a=分析(['main.py'

我正在尝试捆绑一个用Python编写的应用程序,并在捆绑包中包含相关的数据文件。我添加数据的方式有什么问题

这是使用等级库文件排除某些库并包含数据文件。我运行cmd
pyinstaller--onefile main.spec

#-*-模式:python-*-
分组密码=无
添加了_data=[('file_one.pickle','.'),
('file_two.pickle','.'),
('file_three.pickle','.')]
排除的库=[XXX]
a=分析(['main.py'],
pathex=['C:\\Users\\XXX\\XXX\\XXX\\XXX\\Folder'],
二进制文件=[],
数据=添加的数据,
hiddenimports=[],
hookspath=[],
运行时挂钩=[],
排除=排除的库,
win\u no\u Preference\u redirects=False,
win_private_assemblies=False,
密码=分组密码,
无存档=假)
pyz=pyz(a.pure,a.zipped_数据,
密码=分组密码)
exe=exe(pyz,
a、 剧本,
[],
exclude_binaries=True,
name='main',
debug=False,
引导加载程序\u忽略\u信号=False,
strip=False,
upx=真,
控制台=真)
coll=COLLECT(exe,
a、 二进制文件,
a、 拉链,
a、 数据,
strip=False,
upx=真,
name='main')

当我运行
.exe
时,程序会一直运行,直到需要绑定文件为止。但是,如果我将文件放在与
.exe

相同的目录中,程序将完全运行。捆绑文件的方式很好,但我建议您在生成参数中使用标志。我认为你的问题在于你检索文件的方式。 根据:

当捆绑应用程序启动时,引导加载程序将设置sys.freezed 属性,并将捆绑文件夹的绝对路径存储在
sys.\u MEIPASS
。对于一个文件夹包,这是指向该文件夹包的路径 文件夹。对于单文件包,这是临时文件的路径 引导加载程序创建的文件夹

因此,您可以将这些文件捆绑在一个临时目录中,类似于
C:/Users//AppData/Local/Temp/\u MEIxxxxxx
。您需要从那里检索文件

import os
import sys


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)


if __name__ == "__main__":
    file_one_path = resource_path("file_one.pickle")
    file_two_path = resource_path("file_two.pickle")
    file_three_path = resource_path("file_three.pickle")

这应该添加到.spec还是.py I-am打包中?谢谢。这是一个python脚本,应该添加到脚本中。你的规范文件看起来不错。