You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过已有.spec文件使用PyInstaller生成onedir格式程序包

问题原因

  1. 命令参数格式错误:PyInstaller的目录打包参数为--onedir(两个短横线开头),你使用的-onedir参数无法被正确识别
  2. 现有spec本身是单文件格式配置:单文件打包的spec会将所有依赖资源全部传入EXE类生成单个可执行文件,onedir格式需要新增COLLECT块统一收集资源到目录

解决方法

直接修改spec文件即可实现onedir格式打包,修改后的完整spec内容如下:

# -*- mode: python ; coding: utf-8 -*-
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("scipy.special")
block_cipher = None

a = Analysis(['main_gui.py'],
             pathex=['C:\\Users\\User\\OneDrive\\Pulpit\\BulaniPunchWydanie\\main'],
             binaries=[],
             datas=datas, # 启用前面收集的scipy资源文件
             hiddenimports=['scipy.special._ufuncs_cxx',
                            'scipy.linalg.cython_blas',
                            'scipy.linalg.cython_lapack',
                            'scipy.integrate',
                            'scipy.integrate.quadrature',
                            'scipy.integrate.odepack',
                            'scipy.integrate._odepack',
                            'scipy.integrate.quadpack',
                            'scipy.integrate._quadpack',
                            'scipy.integrate._ode',
                            'scipy.integrate.vode',
                            'scipy.integrate._dop',
                            'scipy.integrate.lsoda', # 补全原有缺失的逗号避免语法报错
                            'scipy.special.__init__'],
             runtime_hooks=[],
             excludes=['matplotlib',
            'matplotlib.backends',
            'PIL'],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [], # 移除所有资源文件传入,仅保留可执行程序启动逻辑
          name='Bulani Punch',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          icon='Punch_Logo.ico')
# 新增COLLECT块,统一收集所有资源到目录,这是onedir格式的核心配置
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='Bulani Punch')

打包执行

修改完成后直接运行以下命令即可生成onedir格式的程序包,不需要额外加格式参数:

pyinstaller filename.spec

内容的提问来源于stack exchange,提问作者Mateuszac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:12:00