首页 > 解决方案 > 如何将带有 pyinstaller 的 Plotly-Dash 应用程序打包到 Windows 的单个 exe 文件中?

问题描述

我有一个运行绘图仪表板的脚本。当我打包时

pyinstaller --onefile script.py

并运行生成的 .exe 文件,我收到错误消息:

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\my_user\\AppData\\Local\\Temp\\_MEI161122\\dash_html_components\\package-info.json'
[5968] Failed to execute script

这里到底发生了什么,我该如何解决?

标签: windowspyinstallerplotly-dash

解决方案


我认为解决方案是将该组件添加到datas规范文件中的列表中。

...
datas=[('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_html_components', '.\\dash_html_components'), ...] 
...

虽然我不确定。我停止使用该--onefile选项,因为启动应用程序花费了太长时间。相反,我继续使用--onedir.

完整规格文件:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['..\\scripts\\Mint.py'],
             pathex=['C:\\Users\\username\\workspace\\ms-mint'],
             binaries=[],
             datas=[('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_html_components', '.\\dash_html_components'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_table', '.\\dash_table'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_core_components', '.\\dash_core_components'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_renderer', '.\\dash_renderer'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_bootstrap_components', '.\\dash_bootstrap_components'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_html_components', '.\\dash_html_components'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\dash_extensions', '.\\dash_extensions'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\plotly', '.\\plotly'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\pyopenms\\share', '.\\pyopenms\\share'),
                    ('C:\\Users\\username\\anaconda3\\envs\\ms-mint\\lib\\site-packages\\pymzml', '.\\pymzml'),

                    ],
             hiddenimports=['pkg_resources.py2_warn'],  
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             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,
          [],
          exclude_binaries=True,
          name='Mint',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='Mint')

推荐阅读