当前位置: 首页 > news >正文

PyInstaller实战:深度学习模型与依赖资源一体化打包指南

1. 为什么需要打包深度学习模型?

最近几年,深度学习模型的应用越来越广泛,从图像识别到自然语言处理,各种AI应用层出不穷。但很多开发者都会遇到一个头疼的问题:辛辛苦苦训练好的模型,怎么才能让它在别人的电脑上顺利运行?特别是当目标机器没有Python环境,或者缺少某些依赖库的时候,这个问题就更加棘手了。

我遇到过不少这样的情况:在开发机上跑得好好的模型,一到客户那里就各种报错。要么是缺少某个库,要么是路径不对,甚至有时候连Python版本都对不上。这时候,PyInstaller就成了我们的救星。它能把Python脚本和所有依赖打包成一个独立的exe文件,让模型在任何Windows电脑上都能运行,不需要安装Python环境。

不过说实话,打包深度学习模型可比打包普通Python脚本复杂多了。除了代码本身,我们还要考虑模型权重文件(.pth)、配置文件、自定义模块等各种资源。更麻烦的是,很多深度学习框架(比如PyTorch)还会依赖一些动态链接库(DLL),这些都需要一并打包进去。接下来,我就结合自己的实战经验,详细说说怎么用PyInstaller搞定这些难题。

2. 环境准备与基础配置

2.1 创建专用虚拟环境

打包深度学习模型的第一步,就是创建一个干净的虚拟环境。这一点非常重要,因为深度学习项目通常依赖很多库,如果不隔离环境,打包出来的exe会包含大量不必要的文件,体积可能达到几个GB。

我推荐使用conda来管理虚拟环境,因为它能很好地处理深度学习框架的依赖关系。下面是我常用的命令:

conda create --name model_pack python=3.8 conda activate model_pack

这里我特意选择了Python 3.8,因为PyInstaller的最新版本对Python 3.7的支持不太好。在实际项目中,我就遇到过因为Python版本不兼容导致打包失败的情况。升级到3.8后,问题就迎刃而解了。

2.2 安装必要依赖

在虚拟环境中,我们需要安装项目所需的所有依赖。对于深度学习项目,通常包括PyTorch/TensorFlow等框架,以及项目特定的库。这里有个小技巧:先安装框架的主包,再安装其他依赖,可以减少版本冲突。

pip install torch torchvision # PyTorch相关 pip install pyinstaller # 打包工具 pip install -r requirements.txt # 项目其他依赖

安装完依赖后,一定要先在本地测试模型能否正常运行。我建议写一个简单的测试脚本,确保从模型加载到推理的整个流程都没问题。如果本地都跑不通,打包就更不可能成功了。

3. 使用PyInstaller打包多文件项目

3.1 生成和修改spec文件

很多教程会教你直接用pyinstaller -F main.py来打包,但对于深度学习项目,这种方法基本都会失败。我们需要使用更灵活的spec文件方式。

首先生成spec文件:

pyi-makespec main.py

这会生成一个main.spec文件,我们需要重点修改其中的Analysis部分。下面是一个典型的深度学习项目配置:

a = Analysis( ['main.py', 'models/custom_model.py', 'utils/data_loader.py'], # 所有Python文件 pathex=['D:/projects/my_model'], # 项目根目录 binaries=[], # 二进制文件 datas=[ ('weights/model.pth', 'weights'), # 模型权重 ('configs/settings.yaml', 'configs'), # 配置文件 ('data/labels.txt', 'data') # 其他数据文件 ], hiddenimports=['torch', 'numpy', 'PIL'], # 需要显式导入的库 hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=None, noarchive=False, )

这里有几个关键点需要注意:

  1. datas字段用于指定所有非Python资源文件,格式是(源路径, 目标相对路径)。打包后,这些文件会被放在exe同级目录的指定子目录中。
  2. hiddenimports用于指定那些PyInstaller可能无法自动检测到的依赖。
  3. 所有路径最好使用绝对路径,避免打包时找不到文件。

3.2 处理路径问题

打包后,程序的工作目录会发生变化,所以代码中所有文件路径都需要做相应调整。我建议使用以下方式加载资源:

import os import sys def resource_path(relative_path): """ 获取打包后资源的绝对路径 """ if hasattr(sys, '_MEIPASS'): base_path = sys._MEIPASS else: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 加载模型 model_path = resource_path('weights/model.pth') model = torch.load(model_path)

这个resource_path函数在开发环境和打包后都能正确工作。sys._MEIPASS是PyInstaller创建的临时目录,打包后的资源文件会被解压到这里。

4. 解决常见打包问题

4.1 处理缺失的DLL文件

深度学习框架通常依赖很多系统DLL,打包时经常会遇到"找不到xxx.dll"的错误。我常用的解决方法是:

  1. 用Everything搜索缺失的DLL,通常能在Python安装目录或CUDA目录下找到。
  2. 将找到的DLL文件放在项目的根目录下,然后在spec文件的binaries字段中指定:
binaries=[('cudnn64_8.dll', '.'), ('cublas64_11.dll', '.')],
  1. 对于复杂的依赖关系,可以使用Dependencies工具(一个开源DLL分析工具)查看DLL的依赖树,把缺失的都补上。

4.2 减小打包体积

深度学习模型打包后体积往往很大,这里有几个优化技巧:

  1. 在spec文件中设置noarchive=True,这样PyInstaller不会把所有的Python文件打包成一个大的归档文件,便于调试。
  2. 使用UPX压缩(需要先下载UPX工具):
exe = EXE( ... upx=True, ... )
  1. 排除不必要的库:
excludes=['tkinter', 'matplotlib', 'scipy'],

4.3 处理动态加载的模块

有些库(如PyTorch)会动态加载模块,PyInstaller可能检测不到这些依赖。这时候需要在hiddenimports中显式指定:

hiddenimports=[ 'torch', 'torchvision', 'torch.nn', 'PIL', 'PIL.Image', 'numpy', 'mmcv', 'mmcv._ext' # 如果是用mmcv的话 ],

如果打包后还是缺少某些模块,可以查看PyInstaller生成的warn文件,里面会列出所有未找到的依赖。

5. 高级打包技巧

5.1 打包JIT编译的模型

如果你使用了PyTorch的JIT编译(torch.jit.trace或torch.jit.script),打包时需要特别注意:

  1. JIT编译的模型会依赖特定的PyTorch版本和CUDA版本,最好在目标机器上重新编译。
  2. 可以在运行时检查环境,必要时重新编译模型:
if not os.path.exists('model_compiled.pt'): model = ModelClass() model.load_state_dict(torch.load('model.pth')) traced_model = torch.jit.trace(model, example_input) traced_model.save('model_compiled.pt')

5.2 处理配置文件

深度学习项目通常有很多配置文件(如YAML、JSON),打包后这些文件的位置会变化。我推荐使用以下结构:

project/ ├── configs/ # 开发时的配置文件目录 │ └── settings.yaml └── src/ └── main.py

在spec文件中:

datas=[('configs/settings.yaml', 'configs')],

然后在代码中这样加载配置:

config_path = resource_path('configs/settings.yaml') with open(config_path) as f: config = yaml.safe_load(f)

5.3 多进程支持

如果你的模型推理使用了多进程(如PyTorch的DataLoader),需要在打包时添加多进程支持:

exe = EXE( ... runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug=False, bootloader_ignore_signals=False, strip=False, upx=True, name='model_app', debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None, append_pkg=False, optimize=0, bootloader_ignore_signals=False, name='model_app', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, uac_admin=False, uac_uiaccess=False, asadmin=False, debug_bootloader=False, multipackage=None, append_pkg=False, optimize=0, icon=None, version_file=None, manifest=None, resources=None, ascii=False, clean_build=False, silent=False, onefile=False, windowed=False, runtime_tmpdir=None,
http://www.cnnetsun.cn/news/1885847.html

相关文章:

  • 终极视频PPT提取指南:三分钟从视频到PPT的完整教程
  • SwiftUI 进阶特性:Combine、Core Data 与 SwiftUI 的完美结合
  • AirPodsDesktop终极指南:在Windows上免费恢复苹果耳机完整体验
  • TVA时代企业IT工程师的新使命(系列之二)
  • 避坑指南:Flutter 开发环境一站式配置与疑难排解
  • Dragonfly与Harbor集成:构建高效P2P私有镜像分发方案
  • 如何永久掌控你的数字记忆:留痕工具让微信聊天记录成为永恒财富
  • 高质量非机动车检测数据集构建与优化实践
  • Navicat Premium macOS无限试用重置方案:安全解除14天限制的完整指南
  • Linux图形开发实战:如何用libdrm直接操作/dev/dri/card0(附完整代码示例)
  • 生物医学研究的革命性工具:UK Biobank RAP平台完全指南
  • 第六章:LangGraph 编排引擎 —— 构建可控的 Agent 工作流
  • Spring Boot 异步任务执行与监控机制
  • NoSQL数据库选型指南
  • GPT-5.4 mini API 实测:和 Claude 4.6、DeepSeek V3、Qwen 3 打了一圈,结果出乎意料
  • Wan2.2-I2V-A14B前端交互界面开发:基于Vue.js的实时预览系统
  • 3步搞定Windows风扇控制:FanControl中文配置终极指南
  • 【AIAgent数据分析效能跃迁指南】:基于奇点大会实测数据——传统BI团队转型周期缩短68%,关键动作清单已验证
  • Spring Boot Starter 封装逻辑
  • 软件亲和图管理中的创意分类者
  • 开发团队管理化技术中的开发团队计划开发团队实施开发团队验证
  • GLM-4.1V-9B-Base实操手册:服务崩溃自动告警与微信通知集成
  • AI人脸隐私卫士应用场景:社交媒体分享前必备隐私工具
  • TMSpeech:你的Windows本地实时语音转文字助手
  • FF14副本动画跳过插件:3步快速配置指南,告别冗长等待
  • 深度解析MelonLoader:Unity游戏模组加载器的3大核心技术架构
  • 如何在UK Biobank研究应用平台上实现生物信息分析自动化
  • 3步解锁QQ音乐加密文件:qmc-decoder让您的音乐收藏重获自由
  • 保姆级避坑指南:在Ubuntu 22.04上用RTX 4080成功复现FoundationPose(CUDA 11.8 + PyTorch 2.0)
  • explainerdashboard源码解析:深入理解可解释AI的实现原理