python - Pyinstaller - 从最终可执行文件中排除文件

标签 python linux windows pyinstaller

我正在开发一个跨平台应用程序,它从源目录为 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

关于python - Pyinstaller - 从最终可执行文件中排除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192528/

相关文章:

python - 在 Python 2.7 中将列表字典转换为字典列表

python - hell 犬。至少应该存在两个键之一是 json

python - 将具有特定颜色图的 3D 图像转换为具有特定 int 值的 2D 图像

64 位操作系统上的 .Net WinForm 系统蜂鸣声

Java 无法识别的选项 : -xvf

Python:从处理后的图像中创建视频

c - sigqueue() 向进程组发送信号

c - Linux 如何确定自定义信号处理程序的优先级?

linux - Guess_number 脚本将 WHILE 添加到 guess_number 中并运行它

c - 将 2 个字符串放在一起