Python用PyInstaller打包BasicSR程序出现WinError 3找不到路径报错
根因说明
你的推测方向正确,BasicSR内部使用os.scandir动态扫描archs目录加载对应架构类,报错的核心是PyInstaller打包时没有完整保留BasicSR库的目录结构:你当前写的hook仅收集了*_arch.py文件,没有把basicsr/archs/__init__.py以及整个目录结构打包进运行时的临时目录,导致扫描路径不存在。
解决步骤
- 第一步:修改
hook-basicsr.py文件,完整收集BasicSR的所有数据文件和隐藏导入模块:
from PyInstaller.utils.hooks import collect_data_files, collect_submodules # 收集basicsr下所有目录结构和资源文件 datas = collect_data_files("basicsr") # 收集所有动态导入的子模块,避免运行时找不到依赖 hiddenimports = collect_submodules("basicsr")
- 第二步:清除之前打包生成的
build、dist文件夹和所有缓存文件,避免旧缓存干扰。 - 第三步:重新执行打包命令:
pyinstaller yogeshbhaiDesktop.spec - 可选补充:如果修改hook后仍报错,可以手动在.spec文件的
datas配置项中补充本地BasicSR的目录映射:
# 替换路径为你本地Python环境中basicsr库的实际安装路径 datas=[ (r"你本地Python路径\Lib\site-packages\basicsr\archs", r"basicsr\archs"), (r"你本地Python路径\Lib\site-packages\basicsr\utils", r"basicsr\utils") ]
- 排查技巧:如果还有其他缺失文件报错,可以临时把spec文件中的
console=False改为console=True,运行exe时会弹出控制台打印完整报错,对应补充缺失的文件到datas配置即可。
内容的提问来源于stack exchange,提问作者Bhavik Gabani
相关产品推荐
相关产品推荐

