[笔记]利用pyinstaller打包.py文件成.exe我遇到的问题

利用pyinstaller打包.py文件成.exe我遇到的问题

最近大创做了个AI可视化系统,使用pyinstaller时遇到一些问题,如果你也在使用pyinstaller做小项目,这篇文章也许能帮到你

编译环境

IDE:pycharm

配置要求:windows10操作系统

修改日期:2019/3/9

简单介绍pyinstaller打包流程

  1. pycharm安装pyinstaller

  2. Terminal处打开你所需要打包的.py文件(启动文件)的根目录

  3. Terminal下输入:“pyinstaller -F -w XXX.py” 就可以制作出exe,生成的文件放在同目录dist下

    其中,-F是所有库文件打包成一个exe,-w是不出黑色控制台窗口

  • 第一次打包不建议 -w,因为生成的控制台会提示你所打包程序报错的详情

Q1: pyinstaller[Errno 28] No space left on device

  1. 检查C盘是否有剩余空间
  2. 在启动文件(.py)处加入方法freeze_support
from multiprocessingimport freeze_support

if __name__ =='__main__':

    freeze_support()

参考博客:https://blog.****.net/xiong_big/article/details/54614231

Q2: RecursionError: maximum recursion depth exceeded

  1. 执行pyinstaller -F XXX.py后 它会在你的目录文件生成XXX.spec文件
  2. 打开XXX.spec文件,在开头添加下面两行代码
import sys

sys.setrecursionlimit(1000000) 
  1. 继续执行打包,但是在Terminal处使用命令pyinstaller -F XXX.spec,不然前面所打包的不予保存(相当于重新打包了)。

Q3: Cannot find existing PyQt5 plugin directories Paths checked: C:/qt5b/qt_1524

  1. 此电脑处全局搜索PyQt5,找到 /Library/plugins路径下的PyQt5文件夹,将里面的dll动态库pyqt5qmlplugin.dllpyqt5.dll复制出来
  2. 按照错误提示的路径,一个个的新建文件夹,形成目录C:\qt5b\qt_1524647842210_h_env\Library\plugins,将刚才复制出来的dll动态库拷贝进去即可

参考博客:https://ask.****.net/questions/749913

Q4: 关于打包图片与.txt等文件

  1. 首先需要把需要更改.spec文件
  2. [笔记]利用pyinstaller打包.py文件成.exe我遇到的问题
  3. [笔记]利用pyinstaller打包.py文件成.exe我遇到的问题
  4. 更改程序中用到资源文件的位置,在需要调用.txt等文件处加入并调用方法下述完成.txt等文件的调用
  • 所要添加的方法
def resource_path(relative_path):
    if hasattr(sys, "_MEIPASS"):
        return os.path.join(sys._MEIPASS,relative_path)
    return os.path.join(os.path.abspath("."), relative_path)
  • 例如:
file_path = resource_path(os.path.join("res", "CH2/trainingDigits/%d_%d.txt" % (random.uniform(0, 9) , random.uniform(0, 120))))

scr.insert('insert', open(file_path).read())
  1. 执行
pyinstaller -F xxx.spec	#打包过
pyinstaller -F xxx.py	#第一次打包

参考博客:https://baijiahao.baidu.com/s?id=1621989471136969769&wfr=spider&for=pc