【问题标题】:Pyinstaller - Exclude files from final executablePyinstaller - 从最终可执行文件中排除文件
【发布时间】:2014-02-07 04:11:41
【问题描述】:

我正在开发一个跨平台应用程序,它从源目录为 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 创建二进制文件时,Linux 的所有其他二进制文件也包含在最终的可执行文件中。这使得最终的独立可执行文件的大小更大。

有没有办法告诉 pyinstaller 从源目录中排除某些文件/二进制文件。 还有 是否可以排除某些 *.so/ *.dll 中确实不需要的最终的可执行文件?

我使用以下开发:-

Python 2.7

Pyinstaller 2.1

Debian 7 for linux

Windows 7 for Win

如有任何帮助,我们将不胜感激。

【问题讨论】:

    标签: python linux windows pyinstaller


    【解决方案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

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

    【讨论】:

    • 感谢您的脚本。有效。但几乎没有修改。像这样:- a.datas += extra_datas(some_dir,["path/to/something.txt","path/to/something.exe",...])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多