windows - 如何将带有 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
这里到底发生了什么,我该如何解决?
解决方案
我认为解决方案是将该组件添加到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')
推荐阅读
- kotlin - 运行 Jacoco 覆盖时缺少带有 when 和 enum 的分支
- react-native - 更新应用程序后 React Native fetch() 响应不同
- java - 如何导出包中的文件?
- node.js - JSON Parse 错误:尝试更改值时发生意外的 EOF
- reactjs - 加载包含 jwt-token 的html
- android - 在 Intent 中设置类型以启动 Activity
- android - 仅编辑edittext android中的特定内容
- redirect - 如何让谷歌搜索显示新域而不是旧域?
- django - 即使所有设置都很好,Django也无法加载静态文件
- java - 需要使用任何java API从给定的数字列表中随机生成每个值相同次数的数字