使用auto-py-to-exe打包Python为exe时frozendict缺失VERSION文件的解决方法
解决auto-py-to-exe打包后frozendict的VERSION文件缺失问题
问题现象
使用auto-py-to-exe打包Python脚本后,运行生成的exe文件时出现以下错误:
Traceback (most recent call last): File "NNbacktest.py", line 29, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module File "yfinance\__init__.py", line 23, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module File "yfinance\ticker.py", line 29, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module File "yfinance\base.py", line 32, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module File "yfinance\data.py", line 18, in <module> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module File "frozendict\__init__.py", line 33, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\jsgas\\AppData\\Local\\Temp\\_MEI100882\\frozendict\\VERSION' [13020] Failed to execute script 'NNbacktest' due to unhandled exception!
错误根源是PyInstaller未自动打包frozendict库所需的VERSION资源文件,导致运行时无法读取该文件。
解决方案
方案1:通过auto-py-to-exe添加额外文件
- 打开auto-py-to-exe工具,找到Additional Files模块
- 点击
Add Files,定位到你的Python环境中frozendict包的VERSION文件(通常路径为Python安装目录\Lib\site-packages\frozendict\VERSION) - 在文件的输出路径设置中,填写
frozendict/,确保打包后该文件会被放置到临时目录的frozendict子文件夹下 - 重新执行打包流程
方案2:手动修改PyInstaller spec文件
- 打开命令行,执行
pyi-makespec NNbacktest.py生成对应的spec文件 - 打开生成的
NNbacktest.spec,找到datas参数,添加以下内容(替换实际路径):datas=[('C:/你的Python路径/Lib/site-packages/frozendict/VERSION', 'frozendict')], - 执行
pyinstaller NNbacktest.spec完成打包,或者在auto-py-to-exe中选择Spec File模式加载该文件进行打包
方案3:修改frozendict源码(临时 workaround)
- 找到Python环境中frozendict的
__init__.py文件(路径为Python安装目录\Lib\site-packages\frozendict\__init__.py) - 定位到读取VERSION文件的代码段(约第33行),将原代码替换为直接指定版本号:
# 替换前的原代码: # with open(os.path.join(os.path.dirname(__file__), 'VERSION')) as f: # __version__ = f.read().strip() # 替换为(版本号改为你安装的frozendict实际版本): __version__ = "2.3.8" - 保存文件后重新打包脚本
内容的提问来源于stack exchange,提问作者cansado
相关产品推荐
相关产品推荐

