Skip to main content
 首页 » 编程设计

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

2023年11月22日74exmyth

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