• 【Python】pyinstaller打包百科全书


    前言

    记录pyinstaller打包中的常用命令和报错。

    详细的还是去官网自己看吧,这里只记录打包中常用到的命令。
    如果我这里帮助不到你, 官网在这里:https://github.com/pyinstaller/pyinstaller

    这两篇文章基本覆盖100%的报错了,
    参考这里: https://hackmd.io/@quency/B1QmM5-OD
    还有这里:https://www.pythonguis.com/tutorials/packaging-pyqt5-pyside2-applications-windows-pyinstaller/

    知识点📖📖

    安装模块

    pip install pyinstaller
    
    • 1

    查看命令,如何使用

    pyinstaller -h
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    注意图中圈出来的 What to genereteWindows and Mac OS X specific options,用的比较多的也就只有它们

    options解释
    -F打包成一个文件捆绑的可执行文件(默认打包为一个文件夹,不建议
    -n、–name指定名称打包程序名称(默认值为脚本的基本名称)
    –add-data添加文件或文件夹(注意看格式要求
    -w不显示控制台窗口
    -i指定.exe程序的图标

    这些命令都可以组合使用!!!


    实现

    具体的命令使用以下命令进行查看

    pyinstaller -h
    
    • 1

    打包要略

    这里展示多种打包的方式,看似多种,实际上是一种。
    通用的命令是

    pyinstaller scripts.py
    
    • 1

    现在脚本名为demo.py,则输入 pyinstller demo.py,如下动图所示

    打包成功后,(因为没有指定路径) 会在当前文件夹下生成一些文件和文件夹

    • 除了红色框选出来的文件外,其他的都是pyinstaller生成的。
    • 接下来就可以在 dist -> demo,找到 demo.exe,就可以运行了

    在这里插入图片描述

    基础打包

    demo.py

    # -*- coding: utf-8 -*-
    for i in range(10):
        _str = input('输入任意内容: ')
        print(_str)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在命令行中输入:pyinstaller demo.py,等待打包完成;

    接着打开 dist -> demo,找到 demo.exe,双击运行它,效果如下图所示

    通过上面可以发现,默认生成的 .exe 文件,带有

    • 控制台窗口
    • .exe 执行程序在文件夹里面
    • 默认ico图标

    值得注意的是,这里 .exe是无法脱离当前文件夹执行的,这个非常不好。;我更偏爱于生成单个可执行的 .exe,所以后面生成单个可执行文件。


    单个执行文件 & 去除控制台窗口

    有些程序,并不需要控制台窗口

    上面说到,通过

    • -F:指定单个执行文件,
    • -w:去除控制台窗口

    demo.py

    • 这段代码执行后会生成以当前年月日时分秒命名的.txt文件
    import datetime
    
    exec_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
    
    with open(file=f'{exec_time}.txt', mode='w', encoding='utf-8') as f:
        f.write('hello world!')
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在命令行中输入:pyinstaller demo.py -F -w,等待打包完成;

    接着打开 dist,找到 demo.exe,双击运行它,效果如下图所示

    通过上面可以发现,文件没有是单个可执行文件,且不会弹出控制台窗口了。


    指定ico图标 & 任务栏图标

    .exe加上一个好看的图标,不使用默认的图标。.exe图标跟任务栏图标一致。

    demo.py

    # -*- coding: utf-8 -*-
    for i in range(10):
        _str = input('输入任意内容: ')
        print(_str)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在命令行中输入:pyinstaller demo.py -F -i demo.ico,等待打包完成;

    接着打开 dist,找到 demo.exe,可以看到.exe的图标和指定的ico是一致的。

    • demo.ico 在这里是一张16×16像素的ico图。

    运行效果如下图所示:

    • 可以看到,任务栏的图标也是改变了的。

    在这里插入图片描述

    Qt 指定任务栏图标

    譬如在打包 pyside2、pyqt5GUI程序时候,
    有时候用上述的命令,.exe的图标并不会作用于任务栏,则使用以下的代码。

    • 将这段代码放置在最前面,然后使用setWindowIcon()设置好.exe的图标,后面任务栏的图标就会跟随 .ico了。
    # 任务栏ico与工具左上角ico同步
    try:
        # Only exists on Windows.
        from ctypes import windll
        myappid = 'mycompany.myproduct.subproduct.version'
        windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
    except ImportError:
        pass
    
    if __name__ == '__main__':
        # 窗口按照dpi拉伸
        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
        app = QApplication(sys.argv)
        # 设置ico,绝对路径指定路径或相对路径都可以
        app.setWindowIcon(QtGui.QIcon("C:\Users\John\Desktop\demo.ico"))
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    后话

    本次分享就到这里,🐱‍🏍🐱‍🏍
    see you~

  • 相关阅读:
    二、nginx URL重写[rewrite]
    【论文粗读】(NeurIPS 2020) SwAV:对比聚类结果的无监督视觉特征学习
    触发器,寄存器,三态输出电路
    VUE3项目启动过程中遇到的问题记录
    前端如何优化工程
    Kafka 自动配置部署信息的脚本记录
    SpringBoot整合Minio文件存储
    [答疑]泛化关系上的泛化集(Generalization Set)操作
    关于我在字节跳动青训营做了个抖音这件事
    表白墙(前端+后端+数据库)
  • 原文地址:https://blog.csdn.net/weixin_45081575/article/details/127688114