使用PyInstaller打包D-tale生成EXE时遇文件缺失错误的解决方法
PyInstaller打包D-tale为EXE文件的文件缺失问题解决
问题现象
打包过程中出现以下文件找不到错误:
FileNotFoundError: No such file of directory: ...\dash_colorscales\metadata.json.
FileNotFoundError: No such file of directory: ...\dtale\translations.
已尝试的hook文件:
from PyInstaller.utils.hooks import collect_data_files, collect_submodules hiddenimports = collect_submodules('dtale') datas = collect_data_files('dtale', include_py_files=True)
用户的main.py代码:
import dtale if name == 'main': dtale.show().open_browser() app = dtale.app.build_app(reaper_on=False) app.run(host="0.0.0.0", port=8080)
解决方法
1. 修正hook文件,补充缺失的依赖文件收集
修改hook文件(建议命名为hook-dtale.py),同时收集dtale的完整数据文件和dash_colorscales的元数据文件:
from PyInstaller.utils.hooks import collect_data_files, collect_submodules # 收集dtale和dash_colorscales的所有子模块 hiddenimports = collect_submodules('dtale') + collect_submodules('dash_colorscales') # 收集dtale的全部数据文件(包含translations目录) datas = collect_data_files('dtale') # 单独收集dash_colorscales的metadata.json datas += collect_data_files('dash_colorscales', includes=['metadata.json'])
2. 打包时指定hook文件路径
将修改后的hook文件放在单独的hooks目录下,打包时通过参数指定:
pyinstaller --additional-hooks-dir=./hooks main.py
3. 修正main.py的语法错误
代码中的if name == 'main':存在语法错误,需改为:
if __name__ == '__main__':
内容的提问来源于stack exchange,提问作者Milleon
相关产品推荐
相关产品推荐

