完美解决pyinstaller 打包报错找不到依赖pypiwin32 或pywin32-ctypes的错误

1,657 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

报错信息

今天来给大家分享一个绝对绝对的干货,本干货是本人的亲自实践,网上绝对找不到的那种。先来说一下背景。 最近闲来无事,用python的tkinter库开发了一款带日程提醒的万年历桌面程序。在程序开发结束开始打包时,却发现一直报错

PyInstaller cannot check for assembly dependencies.
Please install PyWin32 or pywin32-ctypes.
pip install pypiwin32

但是运行pip install pypiwin32时却提示两个库都已经安装过了

可是当再运行打包脚本时就是死活无法打包,就是提示缺少上面两个依赖库。

各种度娘发现都没有遇到类似奇葩情况的,气的我都想把电脑砸了,可是不行电脑砸了肉疼,并且还是吃饭的家伙,没办法只能另想他法了。

于是决定自行解决,首先根据错误关键词到pyinstaller的源码中去检索报错位置。

最终发现是因为导包问题引起的,两个依赖库确实已经安装只是导入方式不同导致报错。

解决方案

在python安装路径下找到Lib/site-packages/Pyinstaller目录下有个compat.py文件定位到212行

源码如下:

if is_win:
    try:
        from win32ctypes.pywin32 import pywintypes  # noqa: F401
        from win32ctypes.pywin32 import win32api
    except ImportError:
        xxxx
        xxxx

做如下修改:将两个from改为import

if is_win:
    try:5
        # from win32ctypes.pywin32 import pywintypes  # noqa: F401
        # from win32ctypes.pywin32 import win32api
        import pywintypes
        import win32api
    except ImportError:
        xxxx
        xxxx

然后再重新运行打包脚本,打包成功