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 <module>
  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 <module>
    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目錄下的所有東西全刪了

重新打包=》成功。

 

後記:類似緩存中少了dll,pyinstaller又不去全局中補足,導致無法打包的情況,都可以清空其緩存,讓pyinstaller重建緩存解決。如果報錯的路徑與文中不同,可參考這個解決思路進行修復。而至於爲什麼好端端的dll會少掉,大概就是電腦的忠實衛士360乾的好事了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章