关于python3.8+ pyside2 pyinstaller打包的一些坑

你离开我真会死。 提交于 2020-10-07 04:40:52

环境:

python    3.8 

pyinstaller      3.6

pyside2     5.14

打包过程中出现错误(1):

 
  1.  
    7607 WARNING: lib not found: pywintypes38.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\win32\win32evtlog.pyd
  2.  
    7622 WARNING: lib not found: pywintypes38.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\win32\win32api.pyd
  3.  
     

解决方法:

 打包命令中添加  pywintypes38.dll  的路径例如

--paths C:\Users\have_\AppData\Local\Programs\Python\Python38\Lib\site-packages\pywin32_system32

 完整的命令为

 
  1.  
    C:\Users\have_\Desktop\LanZouCloud-API-master>pyinstaller -D -w -i C:\Users\have_\Desktop\LanZouCloud-API-master\favicon.ico --paths C:\Users\have_\AppData\Local\Programs\Python\Python38\Lib\site
  2.  
    -packages\pywin32_system32 C:\Users\have_\Desktop\LanZouCloud-API-master\main.py

 同样下面错误:

 
  1.  
    7634 WARNING: lib not found: shiboken2.abi3.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\PySide2\QtCore.pyd
  2.  
    7647 WARNING: lib not found: shiboken2.abi3.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\PySide2\QtNetwork.pyd
  3.  
    7666 WARNING: lib not found: shiboken2.abi3.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\PySide2\QtUiTools.pyd
  4.  
    7684 WARNING: lib not found: shiboken2.abi3.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\PySide2\QtWidgets.pyd
  5.  
    7704 WARNING: lib not found: shiboken2.abi3.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\PySide2\QtGui.pyd
  6.  
    7725 WARNING: lib not found: pywintypes38.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\win32\win32wnet.pyd
  7.  
    8035 WARNING: lib not found: shiboken2.abi3.dll dependency of c:\users\have_\appdata\local\programs\python\python38\lib\site-packages\PySide2\pyside2.abi3.dll

需要添加  shiboken2.abi3.dll  路径

--paths C:\Users\have_\AppData\Local\Programs\Python\Python38\Lib\site-packages\shiboken2

 

 

打包过程中出现错误(2):

打包完成后运行.exe文件出现  failed to execute script XXX ,例如打包文件为main.py ,打包完成后运行出现:failed to execute script main。

                                                 

对于这种情况,需要重新打包,在打包的时候加入了参数 -c  ,如下:

 
  1.  
    pyinstaller -D -w -c --paths C:\Users\have_\AppData\Local\Programs\Python\Python38\Lib\s
  2.  
    ite-packages\pywin32_system32 --paths C:\Users\have_\AppData\Local\Programs\Python\Python38\Lib\site-packages\shiboken2 C:\Users\have_\Desktop\LanZouCloud-API-master\main.py

打包完成后再次运行.exe文件,控制台窗口一闪而过,出现   ImportError:could not import moudle 'PySide2.QtXml' , 如下图:

这意思是PyInstaller打包的时候,没有把 PySide2.QtXml库打包,因为PyInstaller是通过分析我们的代码里面的 import 语句,推断我们的程序需要哪些库的。但是有些代码,导入库的时候,是 动态导入 。所谓动态导入就是,写代码的时候并不确定要导入什么库,而是在运行的时候才知道。这种情况,不是用 import语句,而是用 __import__ 或者 exec 、 eval 这样的方式,来导入库。

PyInstaller对此有说明,参考这里

PyInstaller 没法分析出动态导入的库有哪些,我们可以通过命令行参数 --hidden-import 告诉它。

 
  1.  
    pyinstaller -D -w -i C:\Users\have_\Desktop\LanZouCloud-API-master\favicon.ico --paths C:\Users\have_\AppData\Local\Programs\Python\Python38\Lib\site
  2.  
    -packages\pywin32_system32 --paths C:\Users\have_\AppData\Local\Programs\Python\Python38\Lib\site-packages\shiboken2 C:\Users\have_\Desktop\LanZouCloud-API-master\main.py --hidden-import PySide2
  3.  
    .QtXml

注意:是'  --hidden-import PySide2.QtXml' , '--'  的前面有两个空格 !

最后打包完成后可能仍然无法运行程序,检查发现我的程序界面采用ui文件动态加载的,

即"self.login = QUiLoader().load('login.ui')",因此需检查dist目录下,打包好的程序文件夹中是否有相应的UI文件,如果没有需要将其复制进去。

此上为本次打包过程中遇到的所有问题。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!