• 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

  • 相关阅读:
    python数据结构树和二叉树简介
    python双向链表的实现
    Python单向链表的实现
    栈和队列数据结构的基本概念及其相关的Python实现
    模型融合目录
    算法汇总目录
    一个完整的机器学习目录
    python基础-面向对象opp
    Python random模块
    python-字符串前面添加u,r,b的含义
  • 原文地址:https://www.cnblogs.com/XJT2018/p/9830149.html
Copyright © 2020-2023  润新知