Python 包括使用Pyinstaller的目录
Pyinstaller的所有文档都谈到了包含单个文件。Python 包括使用Pyinstaller的目录,python,installation,include,pyinstaller,packaging,Python,Installation,Include,Pyinstaller,Packaging,Pyinstaller的所有文档都谈到了包含单个文件。 是否可以包含一个目录,或者我是否应该编写一个函数来通过遍历我的include目录来创建include数组?使用glob怎么样 from glob import glob datas = [] datas += glob('/path/to/filedir/*') datas += glob('/path/to/textdir/*.txt') ... a.datas = datas 在spec文件中的a=Analysis()之后粘贴以下内
是否可以包含一个目录,或者我是否应该编写一个函数来通过遍历我的include目录来创建include数组?使用
glob
怎么样
from glob import glob
datas = []
datas += glob('/path/to/filedir/*')
datas += glob('/path/to/textdir/*.txt')
...
a.datas = datas
在spec文件中的
a=Analysis()
之后粘贴以下内容,以递归方式遍历目录并将其中的所有文件添加到分发中
##### include mydir in distribution #######
def extra_datas(mydir):
def rec_glob(p, files):
import os
import glob
for d in glob.glob(p):
if os.path.isfile(d):
files.append(d)
rec_glob("%s/*" % d, files)
files = []
rec_glob("%s/*" % mydir, files)
extra_datas = []
for f in files:
extra_datas.append((f, f, 'DATA'))
return extra_datas
###########################################
# append the 'data' dir
a.datas += extra_datas('data')
我感到惊讶的是,没有人使用
Tree()
提到官方支持的选项:
这个问题比你想象的要容易 试试这个:
--add data=“path/to/folder/*;”
希望对你有帮助 是的,您只需将目录添加到分析对象中,它们就会被复制
a = Analysis(['main.py'],
datas = [('test/dir', 'test/dir')],
...)
对不起,我真的不明白。我有一个名为
~/Scripts
的目录。我的数据存储在~/Scripts/data
中。我是否应该用a.datas+=extra_datas('data')
替换a.datas+=extra_datas('data')
?如果您的pyInstaller脚本也在Scripts
中,并且您从Scripts
中用python mybuildscript.py
调用它,那么是的,您应该用data
替换,否则,请使用
和。
浏览目录树。感谢您的共享,以优雅的方式为我解决了此问题。现在我只需要这一行:a.datas+=Tree('./dir_to_include',prefix='dir_to_include')
yep,我认为它的文档记录得不够好,但是这个开源的,所以PRs是受欢迎的:)至少对于pyinstaller 4.2来说,数据字段需要作为元组添加。如果要添加多个文件夹,它需要类似于:。。。数据=[('test/dir','test/dir'),('test2/dir','test2/dir')]…
这将包括pyinstaller输出根目录中path/to/folder/中的所有文件以及子文件夹中的所有文件。但是,不会保留任何子文件夹结构-所有文件都将展平到根目录。如果您想将文件包含在相同的目录结构中(但它仍然不会保留子文件夹结构),可以使用--add data=“path/to/folder/*;path/to/folder/”