简单几步, 用 Pyinstaller 打包 Python 应用

项目环境

  • Python 3.7
  • PyQt5
  • Windows 10

项目文件

untitled.ui

主窗口的 UI 文件. 由 Qt Creator 或 Qt Designer 生成. 用于窗体的设计. 下面截图是其设计界面.
我们现在要做的是
1. 按蓝色箭头部分, 创建  `untitled.qrc` 文件来存储 GUI 用到的资源文件, 然后添加一个 `icon.png` 资源到这个列表里.
2. 按红色箭头部分 >> Choose Resource >> 选择 刚刚添加进来的 `icon.png` 作为其按钮图标.

简单几步, 用 Pyinstaller 打包 Python 应用_第1张图片


untitled.qrc

点击 Open Resource File 查看刚刚创建的 untitled.qrc
简单几步, 用 Pyinstaller 打包 Python 应用_第2张图片

// untitled.rqc
<RCC>
  <qresource>
    <file>icon.png</file>
  </qresource>
</RCC>

现在将其转换为 Python 文件 untitled_qrc.py, 以便后面程序打包后继续使用这些资源.

$ pyrcc5 -o untitled_qrc.py untitled.qrc

mainwindow.py

untitled.ui 对应的 Python 文件.
关键点都在注释中标明

# mainwindow.py
import os
import sys

import untitled_qrc  # This import all resources listed in the `untitiled.qrc` file.
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow
from PyQt5.uic import loadUi


def resource_path(relative_path):
    if getattr(sys, 'frozen', False):
        base_path = sys._MEIPASS  # 此路径为我们把 untitled.py 打包为 untitled.exe 后, untitled.exe 所在路径. 也是 untitled.exe 运行时的根目录.
        '''
        Pyinstaller 打包 untitled.py 时, 我们会通过 .spec 配置文件指定在 untitled.exe 的所在路径下创建一个 DATA 文件夹.
        我们会显式的将所有程序需要用到的资源文件在 .spec 文件里定义其 原路径 (就是文件打包前的路径) 和 目标路径 (就是这里的 DATA 文件夹).
        .spec 会把这些文件都拷贝到 DATA 目录下.
        随后我会提到如何生成 .spec 文件. 
        '''
        base_path = os.path.join(base_path, 'DATA')
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)


class MainWindow(QDialog):
    def __init__(self):
        super(MainWindow, self).__init__()
        '''
        下面一行代码输入了文件的相对路径: `untitled.ui`
        通过 resource_path() 返回这个文件的打包后的绝对路径: `exe_file_path/DATA/untitled.ui
        '''
        ui_path = resource_path('untitled.ui')
        loadUi(ui_path, self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

打包为 exe 文件

  1. $ pyi-makespec untitled.py 创建 .spec 文件
    高亮的部分就是我们在生成的 .spec 添加的资源
    语法为
[(原文件路径, 打包后 exe 文件所在路径下要创建的文件夹名),
 ( ... ),
   ...  ]

简单几步, 用 Pyinstaller 打包 Python 应用_第3张图片
2. $ pyinstaller untitled.spec 来打包文件.
执行后生成 builddist.
build 是临时文件, 可不用管.
dist 里有打包好的文件, 可拷贝到别的计算机上用.

你可能感兴趣的:(简单几步, 用 Pyinstaller 打包 Python 应用)