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

时间:2014-01-17 17:49:23

标签: 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从源目录中删除某些文件/二进制文件。同样是否可以执行某些* .so / * .dll,这些实际上并不是必需的。最终的可执行文件?

我使用以下内容进行开发: -

Python 2.7

Pyinstaller 2.1

Debian 7 for linux

Windows 7 for Win

任何帮助都是适当的。

1 个答案:

答案 0 :(得分:1)

确保只添加要排除的文件列表

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

[edit]查看此答案,不包括dll的https://stackoverflow.com/a/17595149/541038