pyinstaller 打包报错 FileNotFoundError 系统找不到指定的文件 api-ms-win-core-handle-l1-1-0.dll

pyinstaller作为一个python打包利器,虽然很方便,但坑实在是多。这不,好久没打过包了,今天一打包,又来了新错:

Traceback (most recent call last):
  File "C:\Program Files\Python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files\Python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\work\python\whiteWalker2\venv\Scripts\pyinstaller.exe\__main__.py", line 9, in
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\__main__.py", line 114, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\__main__.py", line 65, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\building\build_main.py", line 734, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\building\build_main.py", line 681, in build
    exec(code, spec_namespace)
  File "D:\work\python\whiteWalker2\endpoint.spec", line 33, in
    console=False , icon='app.ico')
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\building\api.py", line 436, in __init__
    upx_exclude=self.upx_exclude
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\building\api.py", line 199, in __init__
    self.__postinit__()
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 160, in __postinit__
    self.assemble()
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\building\api.py", line 262, in assemble
    dist_nm=inm)
  File "d:\work\python\whitewalker2\venv\lib\site-packages\PyInstaller\building\utils.py", line 225, in checkCache
    os.remove(cachedfile)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'C:\\Users\\Administrator\\AppData\\Roaming\\pyinstaller\\bincache00_py36_64bit\\api-ms-win-core-handle-l1-1-0.dll'

这不同于以前的第三方库文件找不到,这次就是pyinstaller自身无法找到文件。

于是,填坑开始:

首先,按照国际惯例,删除build和dist目录,重新打包 =》失败。

 只好去system32找api-ms-win-core-handle-l1-1-0.dll,发现它好好的躺在那,并没有缺少。但是看报错的查找路径

C:\\Users\\Administrator\\AppData\\Roaming\\pyinstaller\\bincache00_py36_64bit\\api-ms-win-core-handle-l1-1-0.dll

似乎pyinstaller没有全局寻找该dll,而是从一个它指定的目录(很有可能是缓存)中查找,查找失败后,也没有返回系统环境中找,故而报错.

当然,无脑修复方法就是把dll拷过去,但按照拷dll的尿性,拷完一个,必然缺下一个,这可太蛋疼了。

既然是缓存,那如果干脆把这个文件夹删除,重新打包是否可行呢?

于是立马进入

C:\Users\Administrator\AppData\Roaming\pyinstaller

 pyinstaller 打包报错 FileNotFoundError 系统找不到指定的文件 api-ms-win-core-handle-l1-1-0.dll_第1张图片

将pyinstaller目录下的所有东西全删了

重新打包=》成功。

 

后记:类似缓存中少了dll,pyinstaller又不去全局中补足,导致无法打包的情况,都可以清空其缓存,让pyinstaller重建缓存解决。如果报错的路径与文中不同,可参考这个解决思路进行修复。而至于为什么好端端的dll会少掉,大概就是电脑的忠实卫士360干的好事了。

你可能感兴趣的:(pyinstaller踩坑)