我正在开发一个跨平台应用程序,它从源目录为 linux 和 windows 传送额外的二进制文件。现在我在我的 *.spec 文件中使用以下脚本来包含源目录中的所有二进制文件。
##### 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')
一切正常。现在的问题是,当我从 windows 创建 binay 时,所有其他 linux 二进制文件也包含在最终的可执行文件中。这使得最终的独立可执行文件的大小更大。
有没有办法告诉 pyinstaller 从源目录中排除某些文件/二进制文件。还有是否有可能排除某些在最终的可执行文件?
我使用以下进行开发:-
python 2.7
安装程序 2.1
适用于 Linux 的 Debian 7
适用于 Win 的 Windows 7
欢迎提供任何帮助。
请您参考如下方法:
确定只添加要排除的文件列表
def extra_datas(mydir,exclude=[]):
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)
return [(f, f, 'DATA') for f om files if f not in exclude]
a.datas += extra_datas(some_dir,["something.txt","something.exe",...])
至于 DLL,我很确定有一个明确的排除项来排除通常会自动包含的 dll
[编辑] 查看此答案 wrt 排除 dll 的 https://stackoverflow.com/a/17595149/541038