pyinstaller-打包python程序为exe文件

pyinstaller ---转载文章

  • 视频:https://www.bilibili.com/video/av21670971/

  • PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了。PyInstaller支持Python 2.7和Python 3.3+。可以在Windows、Mac OS X和Linux上使用,但是并不是跨平台的,而是说你要是希望打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作;打包成mac app,需要在Mac OS上使用。

  • 安装

    • pip isntall pyinstaller
  • 使用

    • 命令行程序
      • pyinstaller helloworld.py
    • 窗口程序+命令行输出
      • pyinstaller happy_not.py
    • 只有窗口程序
      • pyinstaller -w happy_not.py
  • 重要选项

    • -D, --one-dir打包成一个文件夹,默认
    • -F, --one-file打包成一个exe文件 (启动慢,在C盘中创建_MEIxxxxxx临时文件夹,由bootloader复制文件运行结束后自动删除,意外关闭程序,临时文件无法删除)
    • -p DIR, --paths DIR添加路径,一般用来添加程序所用到的包的所在位置
    • -c, --console,
    • --nowindowed无视窗,程序后台运行
    • -w, --windowed, --noconsole 提供程序视窗,程序没有命令行输出,默认
    • -i 添加icon图标   pyinstaller -F -w -i "D:360Downloads2018-10pyqt5pyqt5-processBarpic.icon"  "D:360Downloads2018-10pyqt5pyqt5-processBarMain.py 
    • -d, --debug 生成debug模式的exe文件
    • -v FILE, --version=FILE 加入版本信息文件
    • -o DIR, --out=DIR 设置spec文件输出的目录,默认在PyInstaller同目录
  • 经验

    • py程序中使用了第三方库的打包方式(如果python 直接使用cmd安装第三方库在默认环境下而不是anaconda 可以不用复制第三方库)
      • 在打包之前务必找到第三方库的包,把包复制到到跟myfile.py同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退
      • 例如使用BeautifulSoup解析xml
        • from bs4 import BeautifulSoup
        • so = BeautifulSoup(msg, 'xml')
          • 使用了lxml模块,必须把C:UsersplayAppDataLocalProgramsPythonPython36Libsite-packageslxml文件夹复制到打包文件夹
      • 另外一个方法是
        • import lxml
        • pyinstaller会自动引入

     pyinstaller打包程序常见问题总结:

1、缺少PyQt5.sip

  重新cmd安装 pip install PyQt5.sip

2

Could not find the Qt platform plugin "windows" in  This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

  解决方法:拷贝pyqt5的platforms文件夹到生成的可执行程序同级目录下,如我的是:C:UsersAdministratorAppDataLocalProgramsPythonPython36Libsite-packagesPyQt5Qtplugins

3、打开exe文件运行无反应

    • 首先查看自己打包时候用的参数,如果码中没有tkinter之类的GUI窗口的话就不要用 -w 了
      同时查看一下码里面有没有标准化输入输出,例如print,如果有就不要用 -w
      因为 -w 参数的意思是关掉控制台dos窗口,本来要显示的东西就只能显示在dos上,所以自然什都没有

解决方法:

  • pyinstaller -F xxx.py

4、问题:提示failed to execute script xxx

 这个问题我遇到的时候是用tkinter在写一个小程序,生成exe点开之后就出现了failed to execute script xxx的问题,如下图

重新打包,在打包的时候加入了参数 -c 

加入参数-c后重新打包再次运行exe

-c的作用是返回错误信息!错误信息如上图所示,没有找到‘bg.jpg’!
这个文件是我用作tkinter窗口背景的一张资源。
这张图片是直接放在py文件的同一目录下的,直接打开py文件运行没有问题
而生成exe后运行却提示failed to execute scrip...
问题就出在这里!打包后的exe生成在dist文件夹中,exe不在与资源文件在同一目录,将‘bg.jpg’ copy到 与exe文件同一目录下以后问题解决。由此知道,pyinstaller打包并没有将调用到的资源文件打包在exe文件中,所以exe没有办法再用到该资源。解决办法是将资源和exe文件放到同一目录或者将源码中用到的资源路径改成绝对路径。

5、问题:打包的时候出现了很多warning:lib not found...dll

  • 原因是pyinstaller 没有办法识别到这些dll

解决办法:是中copy warning中一些dll文件的名字,再电脑中搜索到他们的路径!
我搜索到的路径:C:UsersASUSAppDataRoamingpyinstallerbincache00_py36_64bit

该路径下面就是那一大堆warning的dll文件,这个路径添加到环境变量里面
方法如下
右键 此电脑——属性——高级——环境变量——用户变量中Path编辑新建然后填入刚刚dll所在的路径
然后问题就解决了

6、已经安装了PyQt5.sip  但是打开打包后的exe文件总是报错缺少PyQt5.sip

解决办法:

  在程序中 引用:import PyQt5.sip

原文地址:https://www.cnblogs.com/XJT2018/p/9830149.html